利用去中心化对赌合约(期货)设计一个稳定币
第0章 引言
本文介绍一种不依赖于特定中心化机构,完全依赖市场和合约,并且不需要法币抵押,却能获得稳定锚定法币的办法。
第1章 一个链上对赌合约
我们现在来利用比特币现金来设计一个链上的对赌合约。
A赌BCH涨;B赌BCH跌。即开仓后,如果BCH比开仓时价格涨了,则A赢钱,反之B赢钱。
假定每人赌资nBCH。即每人出nBCH进赌池。(为了计算方便,我们假设不允许小数出现,只赌整个币)
假设开仓价格x$/BCH。
现在要平仓了,现在价格 y$/BCH
赌局权益计算公式如下:
A赌涨,A的收益为
(x/x-x/y)*n
B赌跌,B的收益为
(x/y-x/x)*n
比如,n=1;x=500$/bch;y=600$/bch
A的收益为,
(500/500-500/600)*1=0.1667BCH
B的收益为:
(500/600-500/500)*1=-0.1667BCH
A的余额为
1+0.1667=1.1667BCH
1.1667*600=700.02$
B的余额为
1-0.1667=0.8333BCH
0.8333*600=499.98$
现在假设 n =1 ; x = 500; y = 400
A的收益为,
(500*1/500-500*1/400)*1=-0.25BCH
B的收益为:
(500*1/400-500*1/500)*1=0.25BCH
A的余额为
1-0.25=0.75 BCH 0.75*400=300.0 $
B的余额为
1+0.25=1.25 BCH 1.25*400=500 $
你会发现,B赌跌,无论BCH的价格涨跌,B的权益都稳定锚定在开仓时的权益。这就是稳定币需要的。
B赌跌,是不会爆仓的,哪怕是x=500$,y=5万$,涨了100倍,B的权益= (500/50000-500/500)*1+1=0.01BCH,换成成美元,0.01*50000=500.0 $。
但A是会爆仓的,如果x=500$,y=250 $,A的权益 = (500/500-500/250)*1+1=0 BCH,即此时,A的币100%输给了B。如果BCH价格跌到50%,还继续跌,B虽然得到了两个币,但总市值已经无法锚定500美元了。
但,我们先不考虑A会爆仓的情况。
第2章Oracle
现在我们来将上述对赌合约,设计成交易上链,并且让B的权益是可以转让,就可以获得一个稳定币。
但还缺一个环节,平仓价格数据如何获得?这里需要Oracle。Oracle是一个发布信息的主体。
Oracle本身有一个数字身份,比如BCH上的Oracle就一定有一对公私钥对,向外界公布其公钥。如果Oracle要发布什么信息,那就拿这个公钥和信息,用他的私钥进行签名。外界就可以用这个公钥和签名,来验证这条信息确实是Oracle发布。
Oracle就可以发布价格数据,一般会发布,价格,和价格的hash值,以及对该信息的签名信息。
一个链上的对赌合约,就可以使用Oracle发布的价格hash值和签名信息,做条件判断来计算对赌结果。
第3章 结束语
更多详细的细节,我还需要去研究。
作者:黄世亮
欢迎关注微信公众号:闪电HSL