PalletOne技术讲堂之Omni协议简介

Pallet  1周前

PalletOne技术讲堂之Omni协议简介_第1张图片

讲师介绍:

曾毅,《SQL Server数据库技术大全》作者,从业于IT行业10余年,先后服务于微软、中金、美国硅谷某科技公司以及归国后区块链创业。参与设计、开发和带领团队完成过大量关于企业管理、金融数据处理、商务智能、移动互联网、供应链金融等相关的项目。专注于数据库、数据仓库、大数据和区块链技术。精通比特币、超级账本Fabric的底层原理和应用开发。现为跨链项目PalletOne 联合创始人&架构师。

一、Omni是什么?

Omni(以前的Mastercoin)是基于比特币区块链的数字货币和通信协议。使复杂的财务功能成为一种加密的方式。计划Omni功能包括发展分散交流、智能财产和储蓄钱包。


JR Willett于2012年1月发布了Mastercoin协议的初稿,在白皮书中提出,现有的比特币协议可以用作协议层,在不改变比特币协议的基础上创建新的货币层次。”

Mastercoin也称Omni项目于2013年7月31日正式启动,任何人都可以通过将比特币发送到特殊的“Exodus地址”来购买Mastercoins协议用于进行交易的数字令牌。

2015年3月,Mastercoin被重新命名为Omni。

二、从比特币的基础说起!

比特币基本交易结构:


在上述表格的倒数第2行,即“锁定脚本”可以是一种“备注信息”(请注意,这里是“可以是”),只要是以OP_Return开头的都属于“备注信息”。就像我们使用网银转账可有填写备注一样,这种“备注信息”的“锁定脚本”,即BCH节点来说是不作处理的。我们称这种“备注信息”为OP_Return数据。

但是这种OP_Return数据,都一定会和这笔交易共同存在BCH的区块里的。这句话的意思是:OP_Return数据是受BCH区块链保护的,这个数据是不可篡改,不可伪造的。哪怕是你再发一笔交易,填写完全一样的OP_Return信息,但这笔交易的txid肯定是不一样的,BCH区块链是可以识别“信息完全相同的OP_Return数据”是属于哪笔交易,在哪个区块的。这意味着,一笔交易tx,外带一个OP_Return数据,这两个信息就会是在全世界唯一性地存在。即使是在同一区块里,相同的输入地址和输出地址外加相同的OP_Return数据,的两笔交易,因为UTXO不同,交易加OP_Return也可以形成唯一性,在区块内部可以排到顺序。

OP_Return一旦写入了区块链,就相当于有了一个时间戳,哪怕是同一区块里的交易,都因排序不一样,而有不同的时间戳。这句话是什么意思呢?就类似于,今天的人民日报第2版发表了一篇文章,那这篇文章就带有2018年7月18日这个时间戳。如果明天,在人民日报第2版完全相同的地方,又发表了完全一样的文章,但时间戳是不一样的。

下面的这笔交易就是带一个OP_Return备注信息,OP_Retrun一般会在浏览器的输出列出中显示为“地址解析失败”,然后在浏览器的输出脚本部分显示具体的数据。比如:

https://www.blockchain.com/btc/tx/19ebbdd3911e3dede7e2daa158c4f6f0d316f6c73666bf7764ad3a1a013b819d

三、设计一个Token(货币)

设计货币,最重要的就是三个功能,货币的发行,建立账户,和货币的转移。发行必须有理有据,你不能胡乱发。我们可以约定好,一次性发行,然后永久不增加。也可以约定好按特定的条件来持续增发。只要定义好规则就好。为了方便起见,我们设计一个一次性发行,永久不增加的货币,我们先管它叫TFBC(The First Bticoin cash's token Coin的首字母缩写),发行76亿(全世界人口,一人一个好了)。初次发行,就将所有的币存放到一个账户上。

建立账户就很开户,允许新用户加入到这套货币体系当中来。新开的户,余额是零,然后可以接收币,收到币后可以发送币给别的账户。这个好理解。

货币的转移,或叫支付,是我们使用这个货币的过程。这个过程必须是安全的和让用户可识别的。你不能出现一个人原本是没有币,他却能支付,即这套货币系统需要能识别出哪个账户有币,然后才能支付,也不能支付的总额超过了账户的余额。让用户可识别的就是说,你得让人知道他账户上有多少币,这个不能显示是假的,或者有人造假说自己有多少币,系统得能识别。

有这三个功能,就实现了一套最简化的货币。我们使用一种中心化的思维来设计的话,就是使用一个账本,形象点说,就是一个excel表格。表格的第1列记录的是账户名字,第二列是账户余额。

货币的发行,就直接在excel表里填写一个账户,随便叫个名字,就叫“闪电”好了,余额是76亿。新建账户就是在excel表格里增加一行,比如新建一个叫“雷神”的账户,余额为0。

货币的转移,比如“闪电”这个账户要转1亿个币给“雷神”。要完成这个过程只需要修改两个数,第1是将“闪电”的余额改为75亿,将“雷神”的余额改为1亿,就完成了。

为了保证转移过程的安全性,我们会要求记录所有的历史支付记录。这样可以通过所有的历史记录回溯到初始发行的货币量,回溯就是将支付的过程逆过来,原本“闪电”支付给“雷神”1亿,回溯就变成了“雷神”支付给“闪电”1亿。如果回溯的最终结果和发行是一样的,那就可以说明整个支付过程是没有问题。

有了历史记录,我们也可以对所有的账户余额进行回溯,回溯的结果一定的所有的账户余额都为零(除了初始发行的那个账户)。

那如何保证记录历史支付呢?我们可以直接在excel表的第3列开始就作为支付记录,比如“闪电”支付给“雷神”1亿,则在“闪电”的第3列记录“-1亿”,而在“雷神”的第3列上记录“+1亿”。而每个账户的最终余额,就是这些历史记录的加总。这个列数我们假定是无限的,这样就可以记录无限次数的交易了。


如果我们将上述一张excle表,复制到很多台电脑上,然后这些电脑可以同步更新数据,那我们就使用了去中心化的方式来实现这套最简化的货币体系。

四、Omni协议

但是,如何保证货币的发行和转移是安全的呢?下面我们来讲如何使用Bitcoin Cash区块链来设计一个安全的货币发行和转移系统,即Omni协议。


我们从第1章的描述中就可以看到,因为有OP_Return数据的存在,将Bitcoin Cash的区块链里的OP_Return数据提取出来,就是一个非常好的“excel表”,每一次对这张表的修改,都会被记录在区块链里,而这些数据是不可篡改,不可伪造的。按第2章的描述,就可以利用“OP_Return excel表”来设计一个去中心化的货币发行和转移系统。

现在我们来利用BCH区块链来设计一套最简化的货币系统。

首先是初始发行。

我们使用一个BCH钱包来发一笔带自定义OP_Return数据的交易,交易的输入是自己控制私钥的地址A,输出有两个,第一个输出还是地址A,即这笔交易是自己发给自己,第二个输出是一个OP_Retrun数据。这个OP_Return数据写的意思就是“使用地址A当成创世账户,给这个账户注入76亿个TFBC货币”。这笔交易我们记为“铸币交易tx1。”

因为BCH系统是不会去识别这个OP_Return里的数据的,所有的BCH节点都会直接忽略掉这个数据。那我们给bitcoin cash的节点钱包做一个外挂,这个外挂程序专门用来解析这个OP_Return数据。这个外挂结合上述tx1和这个OP_Return数据,就可以解析出一张excel表格,表格的第一列就是账户“地址A”,第二列就是“余额76亿TFBC”。


因为OP_Return在BCH网络是不会被检验的,可以被随意填写。有没有可能别人也发一笔交易,包含完全相同的OP_Return数据,来伪造我们上面发行的76亿货币呢?答案是不能的,因为他无法伪造tx1,而外挂程序需要结合tx1来解析出这张excel表格。

那么创世交易的的创造者能不能篡改或伪造铸币交易tx1呢,也是不能的,因为创造者可以使用相同的输入和输出,但无法伪造成相同的UTXO,否则就会被BCH网络确定为双花。

在这个新发生的货币体系里,账户是和BTC共用的,新建账户也就是新建一个BTC地址。这个很简单。

转移货币的过程是这样的,第一次转移是从铸币交易往外支付的,比如支付给地址B1亿个币。支付的过程需要使用“铸币地址A”构造一笔BCH交易,输入是地址A,输出之一是地址B,金额为546聪(这是因为BCH网络的防尘设计,如果删掉了这个限制,金额就可以为0),带上矿工费,第二个输出是一个OP_Return,里面的数据写会被解析为“账户A向账户B支付1亿个币”,我们记这笔BCH交易为tx2。

OP_Return里的数据,在BCH网络是不会被处理的,但在上述的BCH的外挂程序里会被解析出来,解析的结果就是更新这张货币的状态表,如下表。


同样的,因为tx2被BCH区块链打包之后,就不可能再被伪造了,除非BCH网络被回滚了。所以这个货币的状态表就无法被伪造了。

只要地址B上有BCH余额可以支付防尘设置和矿工费,就可以给其他地址支付这个货币了,然后外挂程序就会拿这笔交易和OP_Return里的数据,解析更新货币的最新状态表。

以上就是最简化的Omni协议实现的代币的原理,为了更实用性,代币一般会增加很多功能,比如锁定功能,自动化转币功能……


关于Omni字段的详细解释,参见:https://github.com/OmniLayer/spec

五、USDT简介

比特币协议-> Omni 层协议-> USDT


USDT是基于比特币omni协议的一种代币: https://www.omniexplorer.info/asset/31

ID是31

USDT 的协议结构从底层到顶层大致是:「比特币协议-> Omni 层协议-> USDT」,也就是说,USDT 是基于比特币的一种代币(token),就像大大小小的山寨币大多是基于以太坊(ETH)的一种代币一样;另外USDT 也出了最新的以太坊(ERC20 标准)版本,但我看了下发行量和流通量都太小,所以我们这里还是只讨论前面说的基于比特币Omni 层协议的经典USDT。

我顺着Tether官方给我回复的邮件,去这几个地方进行了研究:

- Omni Core 项目主页:https://github.com/OmniLayer/omnicore

- Omni Core RPC 接口文档:https://github.com/OmniLayer/omnicore/blob/master/src/omnicore/doc/rpc-api.md

- Omni Core 客户端下载页:

https://bintray.com/omni/OmniBinaries/OmniCore/view

调研结论大致是这样:我们可以安装并运行一个Omni Core 节点客户端,然后利用其提供的RPC 接口,实现我们USDT 出入金所需的代币发送、接收等功能;我看了下,接口都是挺全的;其中,对于USDT 来说,接口所需要的代币ID 参数「propertyid」值应该是「31」


在Omni创造USDT:


{

amount: "0.00000000",

block: 324140,

blockhash: "00000000000000001e76250b3725547b5887329cfe3a8bb930a70e66747384d3",

blocktime: 1412613555,

category: "Financial and insurance activities",

confirmations: 214428,

data: "The next paradigm of money.",

divisible: true,

ecosystem: "main",

fee: "0.00010000",

ismine: false,

positioninblock: 767,

propertyid: 31,

propertyname: "TetherUS",

propertytype: "divisible",

sendingaddress: "3MbYQMMmSkC3AgWkj9FMo5LsPTW1zBTwXL",

subcategory: "Activities auxiliary to financial service and insurance activities",

txid: "5ed3694e8a4fa8d3ec5c75eb6789492c69e65511522b220e94ab51da2b6dd53f",

type: "Create Property - Manual",

type_int: 54,

url: "https://tether.to",

valid: true,

version: 0

}

在比特币角度看来,数据是这样的:

https://www.blockchain.com/btc/tx/5ed3694e8a4fa8d3ec5c75eb6789492c69e65511522b220e94ab51da2b6dd53f

Output Scripts

DUP HASH160 PUSHDATA(20)[946cb2e08075bcbaf157e47bcb67eb2b2339d242] EQUALVERIFY CHECKSIG

HASH160 PUSHDATA(20)[da59767e81f4b019fe9f5984dbaa4f61bf197967] EQUAL

1 PUSHDATA(65)[04ad90e5b6bc86b3ec7fac2c5fbda7423fc8ef0d58df594c773fa05e2c281b2bfe877677c668bd13603944e34f4818ee03cadd81a88542b8b4d5431264180e2c28] PUSHDATA(33)[02f88f01791557f6d57e6b7ddf86d2de2117e6cc4ba325a4e309d4a1a55015d785] PUSHDATA(33)[02a94f47f4c3b8c36876399f19ecd61cf452248330fa5da9a1947d6dc7a189a134] 3 CHECKMULTISIG

1 PUSHDATA(65)[04ad90e5b6bc86b3ec7fac2c5fbda7423fc8ef0d58df594c773fa05e2c281b2bfe877677c668bd13603944e34f4818ee03cadd81a88542b8b4d5431264180e2c28] PUSHDATA(33)[026d7e7235fc2c6769e351196c9ccdc4c804184b5bb9b210f27d3f0a613654fe38] PUSHDATA(33)[028991cff7cc6d93c266615d2a9223cef4d7b11c05c16b0cec12a90ee7b39cf85d] 3 CHECKMULTISIG

1 PUSHDATA(65)[04ad90e5b6bc86b3ec7fac2c5fbda7423fc8ef0d58df594c773fa05e2c281b2bfe877677c668bd13603944e34f4818ee03cadd81a88542b8b4d5431264180e2c28] PUSHDATA(33)[0229b3e0919adc41a316aad4f41444d9bf3a9b639550f2aa735676ffff25ba3898] PUSHDATA(33)[02f15446771c5c585dd25d8d62df5195b77799aa8eac2f2196c54b73ca05f72f27] 3 CHECKMULTISIG


当前USDT的属性:https://api.omniexplorer.info/v1/property/31


一笔USDT的转账,数据如下:

https://www.omniexplorer.info/tx/fb0c4bbe4d82158461fc91b3c1803ffb43ff847f19de43acc115d0410089d4d0


{

amount: "6.60000000",

blocktime: 1535294659,

confirmations: 0,

divisible: true,

fee: "0.00010166",

flags: null,

ismine: false,

propertyid: 31,

propertyname: "TetherUS",

referenceaddress: "16r5e7ZFivuwPKdua96D9hySq6F8GQHyQb",

sendingaddress: "1FoWyxwPXuj4C6abqwhjDWdz6D4PZgYRjA",

txid: "fb0c4bbe4d82158461fc91b3c1803ffb43ff847f19de43acc115d0410089d4d0",

type: "Simple Send",

type_int: 0,

version: 0

}

其在比特币看来如下:

https://www.blockchain.com/btc/tx/fb0c4bbe4d82158461fc91b3c1803ffb43ff847f19de43acc115d0410089d4d0

Output Scripts

DUP HASH160 PUSHDATA(20)[a25dec4d0011064ef106a983c39c7a540699f220] EQUALVERIFY CHECKSIG

RETURN PUSHDATA(20)[6f6d6e69000000000000001f000000002756cd00]

(decoded) omni'V�

DUP HASH160 PUSHDATA(20)[4020e25c74f643aee2ca57966a7974316cba33e9] EQUALVERIFY CHECKSIG


最后,为什么同样是创造Token,ERC20火了,而Omni却没火?


为什么USDT不用ERC20,而是用Omni?

1.时间问题。

2.背景问题。Omni的创始人及CTO Craig Sellars也是Tether(USDT泰达币)的创始人及前CTO。Craig也是Synereo和Bitfinex的顾问。

参考更多:

PalletOne技术讲堂之以太坊区块解析流程

PalletOne技术讲堂之 Protobuf原理及使用

PalletOne技术讲堂之玩转Git

PalletOne技术讲堂之RLP编码和解码

PalletOne技术讲堂之密码学基础

PalletOne技术讲堂之货币简史

PalletOne技术讲堂之智能合约漏洞解析

PalletOne技术讲堂之golang编程经验总结

PalletOne技术讲堂之BitShares 2.0 多节点私链部署PalletOne技术讲堂之区块链与比特币特辑(一)

PalletOne技术讲堂之区块链P2P网络解析

PalletOne技术讲堂之DAG技术知多少(一)

区块链世界的IP协议高性能分布式账本

更多有价值的悄悄话,欢迎加入PalletOne社群

添加PalletOne小红微信

加入社区,咨询更多消息

官网:https://pallet.one/

官方邮箱:[email protected]

 Telegram:http://t.me/PalletOneOfficialEN

Github:https://github.com/PalletOne

Twitter:https://twitter.com/PalletOne_org

Medium:https://medium.com/palletone

更多官方咨询,关注公众号获得

你可能感兴趣的:(PalletOne技术讲堂之Omni协议简介)