javascript - 将 js var 传递给 solidity 函数
问题描述
在solidity中写了一个这样的函数,
function AddData(uint _index, string _projectName, string _devAddress, string _developer) public {
Datas[_index] = Data(_index, 0, _projectName, _devAddress, _developer);
}
请注意,这只是整个 Solidity 代码的一部分。在 js 中,我试图将变量传递给函数,但似乎没有工作。我认为这是js变量无法传递给solidity字符串变量。
counterDB.AddData(id_db, projectName, devAddress, developer, function (err, result) {
if (err) {
console.log('Error: ' + err);
}
else {
console.log(result);
}
});
传入的变量是我从数据库中提取并传入智能合约的数据。我检查了每个数据都已正确提取,但我无法将数据传递到函数中。我是否缺少将 var 转换为字符串的函数?
解决方案
您使用的是 web3 v1.0 吗?您是否尝试过像这样传递函数:
var yourContract = new web3.eth.Contract(ABI, contractAddress);
const contractFunction = yourContract.methods.AddData(id_db, projectName, devAddress, developer);
const functionBytes = contractFunction.encodeABI();
const rawTx = {
gasLimit: web3.utils.toHex(200000),
to: contractAddress,
from: addressFrom,
data: functionBytes
};
web3.eth.accounts.signTransaction(rawTx, privateKey)
.then(RLPencodedTx => {
web3.eth.sendSignedTransaction(RLPencodedTx['rawTransaction'])
.on('error', error => { callback(null, error) })
.on('receipt', receipt => { callback(receipt) });
})
请记住,如果您使用它的 json 导出,则必须解密私钥:
var path = process.cwd();
const exportedAccountString = fs.readFileSync(path + '/your_key_file.json').toString();
const decrypted = web3.eth.accounts.decrypt(exportedAccountString, 'YourPasswordHere...');
const privateKey = decrypted.privateKey;
推荐阅读
- html - 滚动时下拉菜单未连接到粘性导航栏
- javascript - 在 React 应用程序中删除 Relay 的连接结构(边缘 -> 节点)是一个好主意吗?最好的方法是什么?
- laravel - 如果用户没有创建内容,如何隐藏编辑和删除按钮
- javascript - 对于 Stripe Connected Accounts,account.updated webhook 对象的哪一部分表示该帐户已启用?
- flutter - 展开ExpansionTile时如何自动向下滚动
- java - Docx4j 试图将模板应用于文档
- java - QueryDsl Projections 将字段留空
- javascript - 内部函数如何获取'dispatch'参数?
- c - 在C中找到三个整数的最大整数
- python-3.x - 在循环中使用颜色图(python)