У меня есть следующий код в app.js
файле моего проекта трюфеля.
импортировать {по умолчанию как Web3} из 'web3'; импортировать {по умолчанию как контракт} из 'трюфельного контракта' импортировать conferrence_artifacts из '../../build/contracts/Conferrence.json' var web3 = новый Web3(новый Web3.providers.HttpProvider("http://localhost:8545")); // Конференция — это наша обычная абстракция, которую мы будем использовать в приведенном ниже коде. var Конференция = контракт (conference_artifacts); Конференция.setProvider(web3.currentProvider); учетные записи var = web3.eth.accounts; переменная учетная запись = учетные записи [0]; Conference.new({из: учетной записи}).then(функция(экземпляр){ console.log(экземпляр); });
Как указано в документации Truffle добавить новый контракт
Примечание. При вызове Conferrence.new({from: account})... {from: account} использовался, потому что я получал сообщение "ошибка неверного адреса"
Журнал ошибок консоли
Ошибка: Ошибка: базовая плата превышает лимит газа в runCall (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\lib\runTx.js:111:17) в C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3686:9 при пополнении (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:881:17) at iterateeCallback (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:866:17) в C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:843:16 в C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3691:13 при применении (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:21:25) в C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:56:12 в Object.async.eachSeries (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\node_modules\async\lib\async.js:130:20) в VM.AsyncEventEmitter.emit (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\lib\AsyncEventEmitter.js:42:9) в runCall (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\lib\runTx.js:111:17) в C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3686:9 при пополнении (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:881:17) at iterateeCallback (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:866:17) в C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:843:16 в C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3691:13 при применении (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:21:25) в C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:56:12 в Object.async.eachSeries (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\node_modules\async\lib\async.js:130:20) в VM.AsyncEventEmitter.emit (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\lib\AsyncEventEmitter.js:42:9) в Object.InvalidResponse (http://localhost:8080/app.js:8374:16) на http://localhost:8080/app.js:32995:36 в XMLHttpRequest.request.onreadystatechange (http://localhost:8080/app.js:35321:13)
Но это прекрасно работает при выполнении в консоли трюфелей -
трюфель (разработка) > Conferrence.new().then(функция(ins){console.log(ins.address)}) 0x7e796caed4202ae58bb58afc214f281969f995b2
NVM об опечатке «Конференция»: p
Поскольку в вашем примере кода используется truffle-contract , вы можете указать значения по умолчанию для своих транзакций и развертываний контрактов, например ( Conference — это имя вашего контракта. Я использовал значения по умолчанию для truffle):
Conferrence.defaults({
from: account,
gas: 4712388,
gasPrice: 100000000000
})
У меня была та же проблема ( base fee exceeds gas limit
), и браузер-солидность дал мне Gas requirement of function xyz.sol:Xyz.doSomething(address) unknown or not constant.
Указание значений по умолчанию помогло в конечном итоге.
При запуске вашего кода в консоли Truffle он гарантирует, что установлены определенные значения по умолчанию:
Для каждой сети, если они не указаны, параметры транзакций по умолчанию будут иметь следующие значения:
- газ: лимит газа, используемый для развертывания. По умолчанию 4712388.
- gasPrice: цена газа, используемая для развертывания. По умолчанию 100000000000 (100 Шеннон).
- from: с адреса, использованного во время миграции. По умолчанию используется первая доступная учетная запись, предоставленная вашим клиентом Ethereum.
(из http://truffleframework.com/docs/advanced/configuration#networks )
Но когда вы работаете в другой среде, например в браузере, эти значения по умолчанию будут недоступны, и вам придется указывать их для каждой транзакции. В вашем случае это означает не только предоставление, from
но и gas
.
Вам нужно увеличить количество газа, которое вы готовы заплатить за создание контракта. Например:
Conferrence.new({from: account, gas: SOME AMOUNT HERE});
В основном ожидаемая стоимость транзакции больше, чем сумма, которую вы предоставляете по умолчанию. Так что вам нужно увеличить газ в вашем звонке в new
.
У меня та же проблема, и я полагаю, что люди путаются в том, что на самом деле означает параметр газа в файле truffle.js.
Я ответил на свой вопрос здесь. Надеюсь, поможет.
Развертывание контракта Truffle либо превышает лимит газа на блокировку, либо закончился газ
Возможно, это не совсем связано с этим вопросом, но я обнаружил ту же ошибку при выполнении truffle test
контракта на твердость, и указанная ошибка газа вводила в заблуждение. Вы можете перевести это как «Неизвестная ошибка при развертывании». В моем случае я мог получить настоящую ошибку, запустив truffle deploy --reset
.
Руссо