Можно ли перевести остаток по договору с другого договора?

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{
 }

 }

Я получаю сообщение об ошибке, когда пытаюсь перевести остаток контракта Б из контракта А. Разве это невозможно сделать?

Я не совсем понимаю, что вы пытаетесь сделать. Вы пытаетесь перевести баланс Б на А (продавца)? Если да, вы должны сделать это в контракте B — вы не можете балансировать таким образом. Вы говорите, что пытаетесь перевести «остаток контракта B из контракта A», что не имеет смысла.
@LauriPeltonen Я хочу перевести остаток по контракту B на адрес продавца в эфириуме. Продавец доступен по контракту А.
@LauriPeltonen Вы имеете в виду, что невозможно передать эфир одного контракта из другого контракта? Пожалуйста, объясни

Ответы (1)

Решение 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);
    }
 }
Я не хочу вносить залог в контракт. Я хочу перевести баланс контракта B на адрес ethereum, доступный в контракте A.
Отредактировал мой ответ. извините за это недоразумение
что делать в функции TransferBalance контракта B? это адрес эфириума, на который я хочу перевести
Это функция для перевода баланса контракта (B) на адрес ethereum. Вы не можете сделать это напрямую из A. Поэтому A должен позвонить B, чтобы выполнить перевод.
Я только что попробовал. Он выполняется успешно, но я не вижу никаких изменений в эфире получателя. Почему это происходит?
Есть ли фонд в B? Каков баланс Б?
было 50 эфир. Я только что попробовал еще раз с 10, 5 и снова 50 эфира, и это сработало отлично! .. возможно я сделал что-то не так!! БОЛЬШОЕ СПАСИБО! Я буквально застрял на несколько дней!
Прохладный. Рад, что это сработало. Однако не забудьте реализовать модификатор, позволяющий передавать баланс B только по контракту A. В противном случае кто угодно может рассосать контракт...
Как мне создать модификатор, который разрешает контракт А. Он также использует msg.sender?