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に含めれば良かったと思うのですが間違っていますでしょうか