以太坊铭文 Facet 协议笔记

facet 想法来源

如果你可以预测只能合约的结果,那么就直接使用预测的结果,不再执行智能合约

function mint(uint256 id) {
    require(_ownerOf[id] == address(0), "Id already minted");

    balanceOf[to]++;
    ownerOf[id] = msg.sender;
}

例如上面的nft mint合约,当我们想mint id=99的 NFT时,在确定99在未mint的情况下,我们执行mint id=99的操作时我们会得到balanceof中记录to地址+1
owner 中 id =99的地址记录为自己的地址

但是实际上是无法确定的,如果两个人同时mint id = 99 时,就不能确定结果

原因是由于区块链是无序的非确定性的,所以我们是无法提前知道只能合约的执行结果的

但是如果将Ethereum作为交易的排序器,那么智能合约的输入参数的顺序就是确定了,那么智能合约的结果也就可以确定了

仅做一笔eth=0的eth转账,在备注里加入calldata

data:application/vnd.facet.tx+json;rule=esip6,{"op":"call","data":{"to":"0xa38ad4c62a70e14619fa56548bb5e11381d58ff6","function":"transfer","args":{"to":"0x75B3763c6E8a0A0e2AcBAB8916d681CBb9059ee3","amount":"39872000000000000000000"}}}

确定调用的合约地址以及合约的入参

facet API

https://api.facet.org/transactions/:hash
https://api.facet.org/transactions/

facet 如何工作

facet 创建了一个facet-vm 该虚拟机负责对交易进行计算存储

具体流程如下:

  • 首先,用户将mint的详细信息编码成以太坊交易。Facet 使用 dataURI 而不是 ABI 编码,除此之外,这一步与基于智能合约的mint非常相似。
  • 接下来,用户将该编码信息作为 calldata 添加到以太坊交易中,并将交易发送给 0x0000000000000000000000000000face7 而不是智能合约。
  • Facet 虚拟机会观察发送到0x0000000000000000000000000000000face7 的信息,并将你的mint交易路由到相应的 Dumb Contract(Facet Contract 被称为 Dumb Contract)。
  • 合约逻辑会执行,状态会持久化,交易收据会通过 API 提供。
如何调用 dumb contract

要调用 dumb contract ,你需要向 null address 发送一个特殊格式的以太坊交易。具体来说,你必须使用 Ethscriptions 协议将请求编码为 dataURI。
下面是一个简单的 ERC20 mint 交易示例:

application/vnd.facet.tx;rule=esip6,{
    "op": "call",
    "data": {
        "to": "0x1234eccd1000898941bc19d3f356322783941fa6",
        "function": "mint",
        "args": {
            "amount": "1000000000000000000000"
        }
    }
}
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值