【转】 Linkdrops:以太坊上发红包的开源标准
以太坊开发者大会开始之前,Status 在布拉格举办了一场主题为 Cryptolife(让加密技术走进生活) 的黑客马拉松。我与来自 Volca.tech / Eth2.io 的 Mikhail 以及来自 trustlines.network / brainbot technologies 的 Bernd、Dong-ha、Dominik 和 Kristoffer 一起开发了一款名为“onbotting.eth”的去中心化应用。
微信红包在最巅峰时期拥有超过 6.5 亿名用户
我们的目标是将 Web 2.0 创造的绝佳用户体验复刻到 Web 3.0 上。 Paypal 自从推出了用户可以兑现的数字支票功能之后,在一年之内吸引了数百万用户。同样,微信受到了中国传统的发红包习俗的启发,推出了线上发红包游戏,在一年之内成了世界上最大的通讯应用。这些都是非常了不起的解决方案,因为它们满足了用户的需求,但是密码学货币目前还做不到这样。对此,我们的解决方案是让用户将密码学货币放入某个地址然后发送出去,无需用到钱包和 gas 之类的东西,就像 Paypal 那样。
我们非常荣幸地获得了 Alex Van De Sande 颁发的社交类应用一等奖和统一登录类应用一等奖。请观看视频了解 “onbotting.eth” 的详情。
运作原理介绍
核心设想
- Bob 是一名新用户,没有以太币和钱包,也不具备密码学货币的背景知识。
- Alice 有一个 EIP 1077 身份合约和一个闲置的 ERC721 机器人
- Alice 通过 Whatsapp 之类的加密信息通道将邀请链接分享给了 Bob
- (在用户层、dapp 层或中继层)有另外一种激励机制来支付 gas 费用
- Alice 将邀请链接分享给了 Bob
- 邀请链接中包含一个中转私钥和一个签名
- Bob 是一名新用户,没有以太币和钱包,也不具备密码学货币的背景知识
- Bob 点击链接进入了一个网页
- Bob 生成了自己的私钥,存储在浏览器上
- Bob 使用中转私钥签署自己的地址
- Bob 的浏览器会将两个签名都发送给中继器
- 中继器调用 Alice 的身份合约
- Alice 的身份合约为 Bob 创建了一个身份合约,并且发送了一个机器人
- Bob 现在已经成了以太坊用户,并且拥有了一个可以一起玩耍的机器人!
linkdrops 的模块化实现
经历过数次迭代之后,Alex van de Sande 和 Marek 开发的 Universal Login SDK 在 Devon 4 上向模块化架构升级。以下是一个简单版本的模块化邀请机制,无需为收款方生成一个身份合约:
这个模块的主要功能是 transferTokensByLink (通过链接实现代币转账):
- 验证两个签名(转账双方的签名)的有效性
- (通过存储 transitPubKey,即中转公钥)来验证该转账链接之前是否被使用过
- 从付款方的身份合约内将代币转移到收款方的地址
使用 owner.canExecute 可以验证付款方的签名 —— https://gist.github.com/Dobrokhvalov/00e2bbca13a1378636fa5a400bd692f5#file-invitelink-sol-L117
进行代币转账的时候可以使用 owner.moduleExecute ——https://gist.github.com/Dobrokhvalov/00e2bbca13a1378636fa5a400bd692f5#file-invitelink-sol-L141
欢迎各位读者给出改进建议,万分感谢!
React Native 启动器的实现
我们正积极致力于将 linkdrops 邀请链接的功能添加进不同的移动应用中。我们已经开发出了 Universal Login React Native Starter (统一登录 React Native 启动器)。欢迎反馈 :) 。
要求
- NodeJS v10.12.0
- Yarn 1.10.
该启动器只在 OS X 系统上测试过。
依赖库
该启动器使用 react-native-navigation 操作码(第一版)进行导航。
rn-nodeify 程序包允许使用节点的核心模块。点击此处了解更多内容。
安全快捷的加密技术原生库:
- react-native-secure-randombytes
- react-native-fast-crypto
通过授权委托降低 gas 成本
为了降低 gas 成本,我们决定研究如何通过提出以太坊改进建议来解决这一问题,我们的灵感来源于 Gnosis Safe、Tenzorum、Argent 之类优秀项目和 #MetaCartel 的 Pet3rpan 给出的反馈。最后 Mikhail 提出了一个解决方案。
嘿,有个好消息!我已经通过 EIP-1167 提出的授权委托创建了合约,将 gas 成本降低了 10 倍。
查看一下优化情况:
优化前 Ropsten 测试网络上的 gas 费用 etherscan
优化后 Ropsten 测试网络上的 gas 费用 etherscan
免 gas 费用的实现
最后,这方面的最新进展是一个免 gas 费用的去中心化网页应用模式,可以看作是 Austin Griffith 的 #burner wallet 的改进版本。这款钱包的演示版即将推出,希望能得到各位读者的反馈,点击该链接可以体验在线版本。
✨ Cryptoxmas.xyz ✨ —— linkdrops 模式下的慈善应用参考例
发送非同质化代币的圣诞卡片来支持委内瑞拉难民
作为一个 linkdrop 模式的圣诞慈善应用,我们已经发起了 this Giveth campaign 的活动,来支持 airdropvenezuela.org 和 bitcoinvenezuela.com 。
视频地址是:
https://twitter.com/dobrokhvalov/status/1071440314169208834
流程
发送流程
- 发送方将 ETH 发送到一个托管智能合约来购买圣诞贺卡(NFT)。(发送方可以选择在卡片售价基础上多发送一些 ETH 给接收方)
- 托管智能合约将 NFT 从销售方那里转移给托管方
- 智能合约会基于 NFT 售价拨出一小部分(0.01 eth)发送至临时账户作为 gas 费用,余下部分作为捐款赠予 Giveth campaign 。超出 NFT 售价部分的 ETH 则由托管方托管,以待接收方领取。
- 发送方分享 claim link(领取链接)给接收方,链接中包含临时账户的私钥
接收流程
- 接收方使用领取链接中的私钥提交领取交易(Claim transaction)
- 托管智能合约将圣诞贺卡(NFT)以及多出的 ETH 发送至接收方地址