我正在使用智能合约更新区块链上的值,但是set方法仅接受整数。
此handleSubmit事件设置新的存储值并获取响应以确认其已更新。
async handleSubmit(event) {
alert('A value was submitted: ' + this.state.newValue);
event.preventDefault();
// Use web3 to get the user's accounts.
const { accounts, contract } = this.state;
await contract.methods.set(this.state.newValue).send({ from: accounts[0] });
const response = await contract.methods.get().call();
this.setState({storageValue: response});
这是智能合约
pragma solidity ^0.5.0;
contract SimpleStorage {
string storedData;
function set(string x) public {
storedData = x;
}
function get() public view returns (string) {
return storedData;
}
}
答案 0 :(得分:0)
在Solidity v0.5.0中,它在重大更改列表中指出:
所有结构,数组或映射变量的显式数据位置 现在必须输入类型。这也适用于功能参数 并返回变量。
由于字符串是实体数组,因此您需要提及字符串的数据位置。
所以您的代码应该看起来像
function set(string memory x) public {
storedData = x;
}
function get() public view returns (string memory) {
return storedData;
}
}