学习solidity的一个简单智能合约(2)——对冲

白皮书见,在以太方上有三种器械。。第一类是财政器械。,为用户提出更可怕的的方法来设法对付和插上一手。包含子钱币,财政衍生品,对冲合约,储蓄财源,临终遗言,甚至多种复杂的雇用和约。以第二位类是半财政器械。,喂有钱币,但也有肥沃的非钱币方向。,一个人使筋疲力尽的加盖随即处置计算成绩的单一的裁定书。。顶点,还要一个人未经触动的的非财务器械,如在线开票和。

随即比照白皮书上的一个人加盖于——对冲合约,就是说,财政衍生品是书面形式的(不管怎样仿照的),我不晓得若何参加限制链。,写智能和约的原文是它特殊要紧。

这是白皮书的一个人加盖于。:

当这些转折点元素都在手中,对冲合约面向会是上面的外表:

希望A进入1000以太网。.

希望B 输出1000以太网。

经过查询最高纪录提出和约,1000枚乙醚金币的花花公子代价,拿 … 来说,X元,收回通告记载。

30天后,容许A或B“重行触发“合约以发送代价X元的以太币(必需品最高纪录提出和约),获取新的价钱并将其计算为A并发送剩余财产的以太网C。

pragma solidity ^0.4.0;

//遵守财政衍生品对冲合约

/*希望A进入1000以太网。.
希望B 输出1000以太网。
经过查询最高纪录提出和约,1000枚乙醚金币的花花公子代价,拿 ... 来说,X元,收回通告记载。
30天后,容许A或B“重行触发“合约以发送代价X元的以太币
(必需品最高纪录提出和约),获取新的价钱并将其计算为A并发送剩余财产的以太网C。*/

诠释智能和约射中靶子套期保值;

contract hedge{
    
    struct giver{
        address Gaddr;/地址
        bool YN;/ /开票
        uint 总数;/总数
    }
    
    struct reciever{
        address RADDR;//B地址
        bool YN;/ /开票        
        uint 总数;/总数
    }
    
    address p1;
    address p2;
    计划(地址) => 赠者) givers;
    计划(地址) => 接受者) 累犯
     
    
function initializeA(address giverA){
        // 一个人社交聚会的设定初值
        授予者[等于] = 1000 ether;
        授予者[吉维拉] = true;
        p1 = giverA;
        授予者[等于] = 0 ether;
    }
    
    function initializeB(address recieverB){
        // B方设定初值
       总数[总数] = 1000 ether;
       食盐[食盐] = true;
       p2 = recieverB;
       总数[总数] = 0 ether;
    }
uint  hedgevalue;
    
    function hedging1(uint 互换物) returns (UIN)
        hedgevalue = 1000 ether /exchangerate ;
        return  hedgevalue;
    }

bool success; function hedging2(uint exchangerate , uint 时期) 退货(BOOL) 成) 也许(时期) != 30) return false ; 也许授予者[P1] == 假) return false; 也许([P2])yn == 假) return false; 授予者[P1] = hedgevalue * exchangerate; 总数[P2]
= 2000 ether – hedgevalue * exchangerate; return true ; } function CICKA(地址) giverA)returns(UIN) 也许(成) 授予者[等于] = 授予者[P1] ; else 授予者[等于] = 1000 ether; return 授予者[等于]; } function checkB(address
recieverB)returns(UIN) 也许(成) 总数[总数] = 总数[P2]; else 总数[总数] = 1000 ether; return 总数[P2]; }}



在上文中是整个编码,下一步将渐渐剖析;

struct giver{
        address Gaddr;/地址
        bool YN;/ /开票
        uint 总数;/总数
    }
    
    struct reciever{
        address RADDR;//B地址
        bool YN;/ /开票
        uint 总数;/总数
    }

率先是决定单方(包含地址)举行O,假设开票(默许局面下),总数)

function initializeA(address giverA){
        // 一个人社交聚会的设定初值
        授予者[等于] = 1000 ether;
        授予者[吉维拉] = true;
        p1 = giverA;
        授予者[等于] = 0 ether;
    }
    
    function initializeB(address recieverB){
        // B方设定初值
       总数[总数] = 1000 ether;
       食盐[食盐] = true;
       p2 = recieverB;
       总数[总数] = 0 ether;
    }

之后对单方举行设定初值。,每个认为进入1000醚;之后断言买卖,乔治英国数学家和逻辑学家变为真;第三把正式送入精神病院是用蓄电方法保藏地址,便利后续处置。,也许你缺少等于,运用使协调,第四次转变但是用于(下次),眼前正是将amount变为0来表现将1000ether转到对冲基金(在实际生活中则有很高的风险,显然这是不可取的)。

uint  hedgevalue;
    
    function hedging1(uint 互换物) returns (UIN)
        hedgevalue = 1000 ether /exchangerate ;
        return  hedgevalue;
    }

这长是对冲的第影片,以汇率为根底将1000个乙醚兑变为其余的钱币;

 bool success;
    function hedging2(uint exchangerate , uint 时期) 退货(BOOL) 成)
        也许(时期) != 30) return false ;
        也许授予者[P1] == 假) return false;
        也许([P2])yn == 假) return false;
        授予者[P1] = hedgevalue * exchangerate;
        总数[P2] = 2000 ether - hedgevalue * exchangerate;
        return true ;
    }

挂钩便是对冲的以第二位部,30 再次回到以太;值当坚持到底的是运用了bool以防买卖使失望;

顶点两个是决定买卖后的总数。;

值当提示。,当兑换率替换时,我运用的概数,这在事实上的中是谈不上的。

顺序可以在重行混音上调试。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注