721合约 erc eth_如何借助智能合约穿越牛熊

0d813101d97a8762bd116b6b84eada77.png

很久没有写东西了,这阵子利用空闲时间做了一款简单却又应用的dapp,在这里分享下设计的理念和大致逻辑,希望读者能从中体会到智能合约是如何运作的。


起因

常言道,守币难如守寡。我很看好以太坊,自认属于ETH的长期持有者,但我自制力又不太好,每当看到币价下跌时,总是想忍不住止损,涨了一些时又想卖掉。哪怕理性上认为应该长持,但还是忍不住操作,结果事实证明我并没有短线操作天赋……

还有一点非常不好的是,心情会受到币价波动影响,并且频繁关注短线操作极度分散注意力,浪费精力。

dde3dade0b627596cd45d53b88b66675.gif

所以,我发现自己需要这样的一个应用:

  • 把ETH锁进去,价格不超过目标,就动不了。
  • 为了避免目标价格定得太高,导致ETH永远取不出来,得有个截止时间,只要到了这个时间,也能取回来。

这个应用,还得保证绝对的安全:

  • ETH锁进去,任何人都不能动,只能满足解锁条件,自己取出来。
  • ETH价格的数据得是真实的,去中心化的,不能由第三方控制。

fe26588763a675994756b31d3ac9ff18.gif

所以,我开发了一个以太坊智能合约应用,刚好满足了以上需求~

实现

在合约中,设计了一种完全符合ERC-721标准的代币,叫MoonBox。它就像大话西游里的月光宝盒那样,可以让你的ETH穿越时空,直到你想要的位置。

// 这里定义了MoonBox合约遵循ERC-721标准。 // ERC-721:以太坊非同质化代币,每一个代币都具备独特的属性,并且可以像普通token一样自由流通。加密猫就是一种最出名的ERC-721代币。 contract MoonBoxs is ERC721 {} 

570f35ff11104f9d879cd07597251ef1.gif

1.创建宝盒

调用合约的创建功能,把任意数量的ETH存进去,并设置好可以打开盒子的ETH价格,以及截至时间。这样就可以创建一枚独属于自己的ERC721代币。

f994d9d5e7f346e046bb10e92f0eea8a.png

创建宝盒后,就能看到属于自己的宝盒的信息了。可以创建多个,还能把宝盒发送给其他人。

0defa0672148fe15556c86752f4fe302.png

2.打开宝盒

接下来,在请求打开宝盒时,合约如何判断当前真实价格呢?我引入了Uniswap合约的ETH-USDC交易对的实时报价接口。

Uniswap是用于在以太坊上进行去中心化token交易的智能合约。它的设计理念由以太坊创始人V神提出,提供了当前各种以太坊上token之间交易价格的读取接口,是目前链上唯一安全可信的去中心化价格预言机。

contract ETH_USDC_UNISWAP {     function getEthToTokenInputPrice(uint256 eth_sold) public view returns(uint256); } 
可以通过以太坊区块浏览器 https://etherscan.io/address/0x97dec872013f6b5fb443861090ad931542878126直接调getEthToTokenInputPrice接口,输入ETH数量,就会返回当前值多少USDC,感兴趣者可以体验下。

好了,现在有了靠谱的价格数据,可以实现打破宝盒的功能了。当请求打破某个宝盒时,依次进行以下判断:

  1. 首先这个宝盒得属于请求者本人。
  2. 宝盒里的ETH数量得大于0,不能是空的。
  3. 通过Uniswap读到现在的价格大于开箱要求的价格,或者当前时间超过开箱要求时间。

条件都符合,宝盒里的ETH就会全部取回,宝盒会被销毁掉。

PS: 如果想保留宝盒,可以调用“openBox”打开宝盒,判断逻辑一样,但宝盒会保留下来作为纪念,不过打开宝盒会给我0.1%的手续费,嘿嘿。

以上就是月光宝盒合约的核心逻辑,通过这个合约,我可以把部分想要长持的ETH定到10000才能取出来,时间定到几年后,这样这些币再也不用操心了~部分追高被套的币,我可以分批定到解套的价格就拿出来卖了。

看起来,还真是个不错的资产管理工具呢~

29dfe25e56b35d6d8a213074207c4f84.gif

安全性

合约源代码已通过etherscan的开源验证,任何人都可以查看。可以确定没有任何后门、漏洞。

但是,按照以上描述的功能,你能想到使用这个合约可能存在的风险吗?

首先,ETH丢失的风险是不存在的,ETH只有宝盒被主人打开才能取出来,没有其他可以转账的功能。

但有一种可能,Uniswap交易合约出了问题,报价不真实,那么可能出现实际ETH价格已经到了,但Uniswap报价却不到,甚至是读不到价格。

为了解决这种可能,我预留了一个权限,可以更换ETH报价合约地址,这样一来,如果uniswap合约更改了,宝盒合约也能及时更换到新地址。

但是这样一来,理论上有一种可能,就是我故意把价格接口改成一个错误的地址,这样所有宝盒都只能等到预设的截止时间才能打开。

虽然这样只会让用户多等待一些时间,对我来说没有任何好处。但是,还是得把所有可能的风险都扼杀在摇篮里~

所以,修改报价接口那里,我加入了一周的缓冲时间,一周后修改才能生效。

在缓冲时间内,所有人都可以看到新的地址,并且可以使用“退出”功能,强制打开箱子,取回所有ETH。

这样一来,真的是100%的安全放心~

14409dd80a945f81de6613b2320a14c6.gif

总结

通过对这个智能合约的介绍,相信你应该get到了智能合约的核心特征:

  • 安全可信。合约发布后就不能修改,并且通过开源,可以自证清白。通过合理的逻辑设计,可以实现100%的资金安全。
  • 自主运行。合约不需要开发者再去维护运作,放在区块链上就会自动生效,用户直接调用就行了。
  • 可组合性。智能合约之间可以相互调用,进行功能组合,拥有无限的可能。比如MoonBox合约的实时价格数据就是来自于Uniswap合约。

如果觉得这个锁仓理财dapp对你有帮助,欢迎体验,地址是https://moonbox.ethapp.me/

题外话:欢迎做区块链/Defi类应用的同行们私信交流,凌冬已至,需要抱团~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值