首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测以太ERC721令牌

如何检测以太ERC721令牌
EN

Stack Overflow用户
提问于 2018-03-20 20:00:39
回答 2查看 1.1K关注 0票数 0

我读过关于ERC165的article,它使我们能够检测在契约中实现了哪个接口。

然而,我发现一些ERC721令牌与其他令牌有点不同,比如cryptokittiescryptohorse

这些不同的ERC721令牌都被钱包应用程序检测为erc721令牌。

以及erc721如何支持wallet检测令牌的类型。

EN

回答 2

Stack Overflow用户

发布于 2019-01-03 12:46:08

是的,一些ERC-721合同不遵循该标准。其中大多数原因是因为它们是在ERC-721标准得到实际确认之前部署的。CryptoKitties就是其中一个例子。

使用ERC-721验证器检查智能合约是否完全遵循ERC-721标准:https://erc721validator.org

票数 2
EN

Stack Overflow用户

发布于 2018-06-30 04:08:00

在golang中,您可以通过调用EVM并检查输出来检测合约是否为令牌,类似于:

代码语言:javascript
复制
// Getting token Decimals 
input, err = erc20_token_abi.Pack("decimals")
if err!=nil {
    utils.Fatalf("packing input for decimals failed: %v",err)
}
msg=types.NewMessage(fake_src_addr,addr,0,value,gas_limit,gas_price,input,false)
evm_ctx=core.NewEVMContext(msg,block_header,chain,nil)
ethvirmac=vm.NewEVM(evm_ctx,statedb,bconf,vm_cfg)
gp=new(core.GasPool).AddGas(math.MaxBig256)
ret,gas,failed,err=core.ApplyMessage(ethvirmac,msg,gp)
tok.decimals_found=false
if (failed) {
    log.Info(fmt.Sprintf("vm err for decimals: %v, failed=%v",err,failed))
}
if err!=nil {
    log.Info(fmt.Sprintf("getting 'decimals' caused error in vm: %v",err))
}
if !((err!=nil) || (failed)) {
    int_output:=new(uint8)
    err=erc20_token_abi.Unpack(int_output,"decimals",ret)
    if err!=nil {
        log.Info(fmt.Sprintf("Contract %v: can;t upack decimals: %v",hex.EncodeToString(addr.Bytes()),err))
    } else {
        tok.decimals=int32(*int_output)
        tok.decimals_found=true
    }
}

但是,如果您不想直接使用EVM,那么可以检查事件签名:

代码语言:javascript
复制
erc20_approval_signature,_ = hex.DecodeString("8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925")
erc20_transfer_signature,_ = hex.DecodeString("ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef")

它们位于event.Topics,因此如果主题与上面的字符串匹配,则合约是ERC20令牌的概率很高。如果收集合约的所有事件,并推导出它使用的方法的摘要,则可以决定它是ERC20还是ERC721

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49383663

复制
相关文章

相似问题

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