トランザクションへ任意の文字列を追加したい
Solidity + Truffleを使用しています
送金した際に任意のメッセージを追加したいです
以下 solidity
event Transfer(address indexed from, address indexed to, uint256 value, string comment);
function transfer(address _to, uint _value) public returns (bool success) {
balances[msg.sender] = balances[msg.sender] - _value;
balances[_to] = balances[_to] + _value;
emit Transfer(msg.sender, _to, _value, msg.data);
return true;
}
以下 truffle console
> con.transfer.sendTransaction(web3.eth.accounts[1], 10, "abc")
> var str = web3.toAscii("トランザクションのinput")
> consol.log(str)
V¸Ç$ñR¾öÇ3O
W×r·2
`abc
abc が取得出来ました
今度は日本語を入力しました
> con.transfer.sendTransaction(web3.eth.accounts[1], 10, "いいね")
> var str = web3.toAscii("トランザクションのinput")
> consol.log(str)
M e©§1K£ÇAAÝǶr»R5ï\Æfñ1! Å
文字化け起こしました
全角が使用出来ないのかなと思い、(フロントのプログラムで)エンコードした値をセットすればと考えましたが、inputの切れ目(目的のデータ位置)がわからずメッセージだけ取り出す方法がわかりません
トークン送付、Eth送金時にメッセージを追加する方法例がある方教えていただけないでしょうか
bytesにすべきとアドバイスがあったのでsolidity変更しました
event Transfer(address indexed from, address indexed to, uint256 value, bytes comment);
function transfer(address _to, uint _value, bytes comment) public returns (bool success) {
balances[msg.sender] = balances[msg.sender] - _value;
balances[_to] = balances[_to] + _value;
emit Transfer(msg.sender, _to, _value, msg.data);
return true;
}
pythonでの実行(EVMではなくすみません)
成功する場合:ただし引数に含めているので不本意です
contract_instance.functions.transfer(W3.eth.accounts[1], 10, com2).transact({'from': ADDRESS_0})
NGな場合
contract_instance.functions.transfer(W3.eth.accounts[1], 10).transact({'from': ADDRESS_0, 'data': com2})
raise ValueError("Cannot set data in transact transaction")
data
に含めれば良かったと思うのですが間違っていますでしょうか