У меня есть контракт с методом, в add()
котором я читаю значение msg.value
и меняю информацию о контракте.
перед обновлением я вызывал этот метод в своем тесте с return contract.add({from: accounts[1], value: 1});
.
после обновления все вызовы создают исключение: Uncaught Error: VM Exception while processing transaction: invalid JUMP
. Чтобы заставить его работать снова, я должен удалить , value: 1
и просто сохранить return contract.add({from: accounts[1]});
. и я все еще получаю сообщение, даже если я удаляю весь код внутри add
метода:function add() {}
Есть ли новый способ отправки эфиров с транзакциями? Я прочитал всю документацию и учебник, но, похоже, все поступают так же, как я.
обратите внимание, что кажется, что вещи исходят от testrpc. Вот какие журналы я получаю:
Transaction: 0x7d739e8416775a70a47616347471024feb8fb7da2dc938d3c7a25acf5031d0b8
Gas usage: 0x47e7c4
Block Number: 0x13
Block Time: Sun Oct 16 2016 17:43:33 GMT+0200 (CEST)
Runtime Error: invalid JUMP
< [
< {
< "id": 61,
< "jsonrpc": "2.0",
< "result": [
< "0x23abbf0929b16b5d905a6cc2735c5d718f598811b5bf4668e64ae91953839571",
< "0xd6f5b175fe05dc3b3df1d96d9793468feb9d098290c4b7ab51e034f276376f17"
< ]
< },
< {
< "id": 62,
< "jsonrpc": "2.0",
< "result": [
< "0x9f9e54e2c65ef2f0bc73dab9622c33cd726d4e81507a55b37b2d62b01b8bf9b1",
< "0xd6f5b175fe05dc3b3df1d96d9793468feb9d098290c4b7ab51e034f276376f17"
< ]
< },
< {
< "id": 63,
< "jsonrpc": "2.0",
< "result": [
< "0x0e1a087bec7de89c464714f7e49b9eb46edcf1c540e32111d2d9506bea02a062",
< "0xd6f5b175fe05dc3b3df1d96d9793468feb9d098290c4b7ab51e034f276376f17"
< ]
< }
< ]
Вам нужно поместить payable
модификатор в вашу функцию.
В последней версии Solidity, если функция не имеет этого модификатора, она выполнит бросок (т.е. выполнит недопустимый прыжок), если получит эфир.
Мэтью Шмидт
Стефан Траума