Пишу контракт на тестирование на частной сети с большим количеством заранее выделенного газа. Следующее работает отлично:
pragma solidity ^0.4.0;
contract accountList {
address[] allowedClient;
function add(address client) returns (bool) {
allowedClient.push(client);
return true;
}
function get() constant returns (address[]) {
return allowedClient;
}
}
Адреса хорошо добавляются, когда я вызываю метод добавления. Я могу получить их, вызвав метод get. Это мне ничего не стоило, так как я использую одну и ту же учетную запись для вызова контракта и для майнинга транзакции (я зарабатываю больше газа, добывая транзакцию, чем я использую для вызова контракта).
У меня заканчивается газ, когда я добавляю второй массив с таким же поведением:
pragma solidity ^0.4.0;
contract accountList {
address[] allowedClient;
address[] test;
function add(address client) returns (bool) {
allowedClient.push(client);
test.push(client);
return true;
}
function get() constant returns (address[]) {
return allowedClient;
}
}
Вызов метода добавления заставляет меня исчерпать бензин
contractInstance.add(coinbase, {from: coinbase}, function(error, result) {
...
}
Отладка в консоли geth:
> eth.getBalance(eth.accounts[0])
1.245e+21
> var t = web3.debug.traceTransaction('0x456...')
> t.structLogs[t.structLogs.length-1].error
"Out of gas"
Баланса 1.245e+21 должно быть достаточно, не так ли? Какую конфигурацию я могу использовать, чтобы избежать ограничения газа в моей частной сети?
По умолчанию газ будет установлен на 90 000 при выполнении транзакции на смарт-контракт и на 21 000 при выполнении транзакции по переводу эфиров на другую учетную запись.
Вот снимок экрана, показывающий, что вам потребуется больше, чем 90 000 газа по умолчанию, и не менее 103 866.
Вам нужно будет вручную указать, каковы ваши лимиты газа, например:
eth.sendTransaction({from: ..., to: ..., gas: 150000})
И для сравнения, если опустить test.push(...)
утверждение, стоимость газа для выполнения add(...)
составляет 63 383, а газ в этой ситуации намного меньше, чем лимит газа по умолчанию в 90 000:
Ли
add
метод? Можешь и это показать?