Skip to main content

AA钱包,合约特点

重点介绍

  1. 合约内部和合约间的转账不需要签名
  2. gas 从最初调用者身上扣除

合约进行的链上交易不需要签名

  1. 合约内部转账:不需要签名。

  2. 用户调用合约:需要签名。

  3. 合约间调用:不需要签名。

总结:合约内部和合约间的转账不需要签名,用户调用合约函数时需要签名。

  1. 合约内部转账:智能合约可以直接在代码中转账,不需要签名。

    address payable recipient = payable(0xRecipientAddress);
    recipient.transfer(1 ether);
  2. 用户调用合约:用户调用合约函数时需要签名,但合约内部的转账不需要额外签名。

    function sendFunds(address payable recipient, uint amount) public {
    require(msg.sender == owner, "Only owner can send funds");
    recipient.transfer(amount);
    }
  3. 合约间调用:一个合约调用另一个合约时进行的转账也不需要签名。

    interface B {
    function receiveFunds() external payable;
    }

    function callB(address bAddress) public {
    B b = B(bAddress);
    b.receiveFunds{value: 1 ether}();
    }

总结:合约内部和合约间的转账不需要签名,用户调用合约函数时需要签名。

gas 从最初调用者身上扣除

合约内部转账和合约间调用的 gas 费用从调用者的账户中扣除。

具体来说:

  1. 合约内部转账:如果是用户调用合约函数引发的转账,gas 费用从用户账户中扣除。

  2. 合约间调用:如果一个合约调用另一个合约的函数,gas 费用从最初调用者的账户中扣除。这通常是用户账户。

例如:

  • 用户调用合约 A,合约 A 转账或调用合约 B,所有相关的 gas 费用都会从用户账户中扣除。

总结:无论是合约内部转账还是合约间调用,最终的 gas 费用都是由最初发起调用的用户账户承担。