недействительный JUMP после обновления truffle и testrpc

У меня есть контракт с методом, в 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"
 <       ]
 <     }
 <   ]
Ошибка, о которой вы сообщаете, является ошибкой в ​​EVM . Нам нужно будет увидеть конкретный код вашего контракта (или просто функцию add()), чтобы ответить на этот вопрос.
Даже если я удалю весь код и просто оставлю функцию ajoutAssureur() { }, я получу ту же ошибку :(. Но конструктор работает нормально, и контракт создается.

Ответы (1)

Вам нужно поместить payableмодификатор в вашу функцию.

В последней версии Solidity, если функция не имеет этого модификатора, она выполнит бросок (т.е. выполнит недопустимый прыжок), если получит эфир.

Большое спасибо, Мэтью, это ключевое слово не появлялось ни в одном учебнике, который я читал! и сообщение об ошибке, которое я получил, еще не было замечено в Google. Большое спасибо за вашу помощь
это новая функция в Solidity, поэтому вы не найдете ее в необновленной документации.