首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >encodeWithSelector与vyper中的呼叫等价

encodeWithSelector与vyper中的呼叫等价
EN

Ethereum用户
提问于 2022-07-31 22:02:11
回答 1查看 407关注 0票数 1

在vyper中,encodeWithSelector (来自固体)的等价性是什么?

例如,在可靠的情况下,如果我想使用原始调用直接在我们自己的合同上使用transfer函数,我会这样做:

代码语言:javascript
复制
function callTransferFunctionDirectly(address someAddress, uint256 amount)
        public
        returns (bytes4, bool)
    {
         bytes4 selector = bytes4(keccak256(bytes("transfer(address,uint256)")));
        (bool success, bytes memory returnData) = address(this).call(
            // getDataToCallTransfer(someAddress, amount);
            abi.encodeWithSelector(selector, someAddress, amount)
        );
        return (bytes4(returnData), success);
    }

我在vyper怎么做?

是的,我知道我们会打电话给transfer,因为它是自己的合同。但这是为了学习。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-08-01 17:21:57

您可以使用concat_abi_encode进行abi.encodeWithSelector等效,并使用method_id函数获取函数选择器。

上述坚实度在vyper中的(近)等价性是:

代码语言:javascript
复制
@external
def callTransferFunctionDirectly(someAddress: address, amount: uint256) -> (Bytes[32])
  call_data: Bytes[68] = _abi_encode(someAddress, amount,  method_id=method_id("transfer(address,uint256)"))
  response: Bytes[32] = raw_call(self, call_data, max_outsize=32)
  • method_id:给你选择器
  • raw_call:是.call等价吗?
  • _abi_encode:是一种abi.encodeWithSelector
票数 4
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/132767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档