远期合约简介

远期合约是两方在特定未来时间以预定价格买卖资产的衍生工具。它是一种非常常见的对冲波动性的工具。因此,使用 USD 远期合约可以对冲 USD 兑 BSV 汇率的波动。

远期合约的收益图

例如,Alice 与 Bob 签订了一份 USD 远期合约。Alice 同意从现在起一个月后以每 BSV 100 USD 的价格从 Bob 那里购买 5000 USD (即每 USD 100,000 聪(=0.01 BSV ))。

Alice 是一名矿工,必须每月支付电费,并希望减轻波动风险。该合同到期后将赋予她 5000 USD 的权利,无论当时的 BSV 汇率如何。 Bob 是一名交易员,他将这份合约作为一种投机手段,期望 BSV 的价格上涨并获利。

他们同意以 BSV 结算合同。各方将相互支付约定价格与 BSV 市场价格之间的差额¹。因此,如果 BSV 的 USD 价值贬值(即 BSV 价格下跌),Bob 将向 Alice 支付差额。同样,如果 BSV 升值,Alice 将不得不支付给 Bob。

BSV USD 远期合约

有了这种远期合约,价格波动风险得到了缓解,但它引入了交易对手风险。Alice 或 Bob 可能在合同到期时不履行合同并拒绝付款。

我们分两步使用 BSV 上的智能合约来实现合约:

  1. Alice 和 Bob 各自将 50 个 BSV (5000 USD * 0.01 BSV / USD )锁定到以下合约中。抵押品不需要第三方保管人。
  2. 当合约到期且预言机公布现货价格时,可以使用公布的价格分割抵押品。交易对手风险得到缓解,因为任何一方都不能作弊。
import "rabin.scrypt";// price info published by oracle
struct OraclePrice {// spot/market priceint price;int time;
}// a USD forward contract settled in bitcoin, as denominated
contract Forward {Ripemd160 alice;Ripemd160 bob;// how much bitcoin Alice plans to sell to Bob, in dollarsint dollars;// predetermined delivery price, in satoshis / dollarint deliveryPrice;// contract mature timeint matureTime;RabinPubKey oraclePubKey;public function settle(OraclePrice op, RabinSig sig, SigHashPreimage txPreimage) {Tx.checkPreimage(txPreimage);// oracle signs serialized price databytes msg = serializePrice(op);// verify price inforequire(RabinSignature.checkSig(msg, sig, this.oraclePubKey));// verify price is for the agreed-on matrue timerequire(op.time == this.matureTime);// total collateral amount, in satoshisint totalSats = SigHash.value(txPreimage);// Bob pays Alice the difference; could be nagativeint payoff = this.dollars * (op.price - this.deliveryPrice);int aliceAmount = totalSats / 2 + payoff;if (aliceAmount < 0) aliceAmount = 0;   //boundedint bobAmount = totalSats - aliceAmount;if (bobAmount < 0) bobAmount = 0;       //bounded// split according to the price when the contract is maturebytes aliceScript = Utils.buildPublicKeyHashScript(this.alice);bytes aliceOutput = Utils.buildOutput(aliceScript, aliceAmount);bytes bobScript = Utils.buildPublicKeyHashScript(this.bob);bytes bobOutput = Utils.buildOutput(bobScript, bobAmount);require(hash256(aliceOutput + bobOutput) == SigHash.hashOutputs(txPreimage));}// serialized price data. It is what oracle signsstatic function serializePrice(OraclePrice op) : bytes {return num2bin(op.price, 4) + num2bin(op.time, 4);}
}

远期合约源代码

智能合约中的预言机使用 Rabin Signature 签署喂价(第 29 行)并使用 OP_PUSH_TX 分割抵押品,即 100 个 BSV 。

合同到期有三种可能:

  1. 价格等于 100K sats/ USD (即每个 BSV 100 USD )。第 38 行的收益为 0。Alice 和 Bob 各取回他们的 50 个 BSV 。

  2. 价格高于 100K sats/dollar。例如,它是 200K sats/dollar(即 BSV 价格跌至 50 USD )。 Bob 将支付 Alice 5000 * (200K -100K) = 5 亿 sats = 5 个 BSV 。 Alice 得到 55 个 BSV ,Bob 得到 45 个。

  3. 价格低于 100K sats/dollar。例如,它是 50K sats/dollar(即 BSV 价格上涨到 200 USD )。 Alice 将支付 Bob 5000 * (100K -50K) = 2.5 亿 sats = 2.5 个 BSV 。 Alice 得到 47.5 个 BSV ,Bob 得到 52.5 个。

讨论

我们只实施了基本的智能合约作为概念证明。有很多方法可以使它更实用,我们列出了其中的一些。

  • 最大曝光:当价格上涨到 1100K sats/ USD ( BSV 价格下跌到 90.9 USD )。 Bob 将支付 Alice 5000 * (1100K -100K) = 50 亿 sats = 50 个 BSV 。如果价格进一步上涨,Bob 将无法用 50 BSV 抵押品支付全部金额。需要更多的抵押品来应对更多的波动风险。

  • 以 USD 结算:当 USD 代币可用于 BSV 时,合约可以以 USD 而非 BSV 结算。也可以使用 USD 抵押品。

  • 故障安全:如果预言机没有发布所需的价格数据,我们可以在智能合约中添加一个公共函数,让 Alice 和 Bob 都签署以取回他们的抵押品。

  • 多个预言机:为了降低恶意预言机的风险,可以使用多个预言机。

总结

我们展示了一个以 BSV 结算的 USD 远期合约。它可以很容易地扩展到任何需要根据外部未来价值划分以 BSV 计价的资金的金融工具。标的资产可以是任何东西,例如黄金、小麦或石油。只要有预言机发布价格,就可以使用上面的智能合约构建远期合约。


[1] 这种类型的远期称为不可交割远期。

BSV 上的点对点结算衍生品:远期合约相关推荐

  1. 远期合约(Forwards/Forward Contract )

    http://wiki.mbalib.com/wiki/%E8%BF%9C%E6%9C%9F%E5%90%88%E7%BA%A6 远期合约概述 远期合约是20世纪80年代初兴起的一种保值工具,它是一种 ...

  2. 期货与期权(part2)--远期合约

    学习笔记,仅供参考,有错必纠 远期合约 远期合约 一种比较简单的衍生产品是远期合约,它是在将来某一指定时刻以约定价格买入或卖出某一产品的合约.远期合约可以与即期合约(spot contract)对照, ...

  3. BSV 上的 zk-SNARKs

    在此之前,我们已经使用零知识证明(ZKP)证明了一个人知道一些数学秘密,而无需透露秘密本身. 秘密知识包括: 与 零知识谜题中的公钥对应的私钥 零知识密钥声明证明 中公共摘要的哈希原像 基于零知识证明 ...

  4. BSV 上的 Schnorr 签名

    我们已经在 BSV 上实现了 Schnorr 签名.这是第一个也是唯一一个已知的实现,没有对原始协议进行任何更改¹. 一笔交易一个签名 Schnorr 是一种可以用于替代比特币签名当前使用的 ECDS ...

  5. 沪胶809合约交割日近,压制远期合约走弱

    沪胶809合约交割日近,压制远期合约走弱 特约撰稿施海 沪胶近月合约RU809已进入交割月,该合约最终实物交割规模有多大?对后续合约走势产生何种影响?笔者在此做一探讨. 由于对胶市走势分歧严重,多空双 ...

  6. 官方发布|BSV区块链协会推出全新智能合约转译器

    发表时间:2022年6月7日 信息来源:bitcoinassociation.net BSV区块链协会推出了一款全新的智能合约转译器.这一工具能让开发者轻松地将以太坊Solidity语言的代码转译成B ...

  7. 在 BSV 上创建你的第一个零知识证明程序

    ZoKrates 是 zkSNARKs 的工具箱,隐藏了零知识证明 (ZKP) 固有的显着复杂性.它为开发人员提供了一种类似于 python 的高级语言来编写他们想要证明的计算问题. 我们扩展了它,使 ...

  8. BSV 上的图灵完备的“规则110”

    我们已经在 BSV 上实现了 规则 110.类似于二维元胞自动机 (CA: cellular automata) 康威生命游戏,一维 CA 规则 110 也是图灵完备的.通过推论,我们再次证明了比特币 ...

  9. BSV上的高效 zk-SNARK:技术解释

    最近,我们在 sCrypt 中实现了 zk-SNARKs,并在 BSV 上运行它.更具体地说,我们实现了 Groth16 算法的验证器,它允许直接在链上验证零知识证明.本文深入探讨了一些细节,阐明了如 ...

最新文章

  1. 扩增子图表解读6韦恩图:比较组间共有和特有OTU或分类单元
  2. 学习笔记----周志华《机器学习》第五章(神经网络)(一)
  3. python中时间处理_Python中处理时间的几种方法小结
  4. laravel静态资源
  5. spring boot mybatis 整合_MyBatis学习:MyBatis和Spring整合
  6. RabbitMQ入门学习系列(五) Exchange的Direct类型
  7. Java HttpURLConnection模拟请求Rest接口解决中文乱码问题
  8. sql server中除数为零的处理技巧
  9. [JAVA]全新java初学者实践教程(全)
  10. 他曾经复读才考上三本,如今让华为开出 201 万年薪(其实还拒绝了 360 万 offer)...
  11. matlab s函数模板,MATLAB第5章S函数.ppt
  12. 多线程下的资源同步访问
  13. Halcon区域特征
  14. js验证手机号、身份证号
  15. 手机怎么申请邮箱?手机邮箱下载
  16. 微服务架构之服务调用
  17. android 调用系统打印
  18. Python编程:从入门到实践+爬虫开发与项目实战+网络编程基础+项目开发实战
  19. 阿里亮相 SIGCOMM2017 调度系统NetO惊艳全场
  20. 史上最全的大厂机器学习面试题,赶紧收藏吧!(附详解答案)

热门文章

  1. SSL 证书购买以及Nginx配置相关问题
  2. 姿态估计2-08:PVNet(6D姿态估计)-源码无死角解析(4)-RANSAC投票机制
  3. Oracle的软件产品是用什么开发出来的
  4. 51nod3241 小明和他的同学们
  5. Atmel推出业内首款面向智能能源和自动化应用的IEEE 802.15.4g-2012双频段收发器
  6. 未来侠机器人教育:不能脱离教育的本质去谈机器人教育培训
  7. R语言melt、table、cut函数应用及解释
  8. Error in melt() : could not find function “melt“
  9. R语言中dcast 和 melt的使用 简单易懂
  10. 仿 微信/QQ 实现小程序功能 -IOS