contract A{
address public seller;
function A(){
seller = 0xdd870fa1b7c4700f2bd7f44238821c26f7392148;
}
function transfer_from_B(address b){
seller.transfer(b.balance);//ERROR
}
}
contract B{
function deposit() payable{
}
}
Я получаю сообщение об ошибке, когда пытаюсь перевести остаток контракта Б из контракта А. Разве это невозможно сделать?
Решение 1
Чтобы принять платежный перевод на смарт-контракт, вам нужно переопределить функцию по умолчанию function ()
и сделать так payable
, чтобы он принимал эфиры.
function () public payable {}
Решение 2
В противном случае вы можете напрямую вызвать функцию deposit
и добавить сумму значения, которую хотите передать этой функции.
seller.deposit().value(b.balance);
Редактировать: недоразумение.
Смарт-контракт не может отправлять свой баланс от имени другого контракта. Вам нужно будет построить передаточную функцию на смарт-контракте B и вызвать ее из A.
contract A{
address public seller;
function A(){
seller = 0xdd870fa1b7c4700f2bd7f44238821c26f7392148;
}
function transfer_from_B(address b){
b.transferBalance(seller)
}
}
contract B{
function transferBalance(to) { // add modifier onlyA
to.transfer(this.balance);
}
}
Лаури Пелтонен
Хайя Раед
Хайя Раед