pEOS 是 EOS 上的首个隐私币项目。近日,团队放出了部分代码, 是在 EOS 链上实现类似比特币的 UTXO 转账模式。现在已经部署了合约至 Jungle 测试网络,今天,就一起体验下。
image.png因为体验 pEOS 的相关的功能,所以今日更文推迟了一个多小时,还请见谅。
今天,我们一起了解下 UTXO 是什么,如何在测试网路上使用 pEOS 的这一功能。
本篇内容根据 pEOS文章编译: https://medium.com/@pEOS_one/peos-implementing-utxos-on-eos-7def08840466
相关链接
代码库: https://github.com/peosdev/utxo
项目链接: https://peos.one
我曾写过两篇文章,介绍 pEOS 这一项目,现在读来应该还不算过时,也可以参考阅读:
EOS+门罗协议: EOS上的隐私币 pEOS 是如何设计的
UTXO 是什么?
image.pngUTXO 是源自比特币的设计。根据《精通比特币》一书的定义:
unspent transaction output (UTXO)
未花费交易输出(UTXO)
UTXO is an unspent transaction output that can be spent as an input in a new transaction.
UTXO 是未被使用的交易输出,可以在新的交易之中用于交易的输入。
根据 UTXO 模型的设计,比特币钱包中的总余额,会通过跟踪和添加钱包中可以消费的所有 UTXO 的总值来计算得到。进行交易的时候,会用掉一些 UTXO,并且,会产生新的UTXO给接收方,如果有找零,也会生成新的 UTXO,返回给原来的所有者。
UTXO只能够作为一个整体来消费,换句话说,你无法消耗一笔 UTXO 的一部分,而是要么使用,要么不用。
比特币,莱特币,狗狗币、门罗币等,都是采用了 UTXO 的交易模型设计。而本文所提到的 pEOS 这一项目,也会在 EOSIO 链上实现 UTXO 的模型,并借助门罗协议的设计,为 pEOS的转账交易提供隐私性。
在文中,pEOS 也提到了该项目与 Everipedia 所提到的 pay2key 方式的不同之处。
与 Everipedia 的 UTXO 模型有什么区别?
对此,pEOS 文章中列出了几个关键点,核心的不同在于是否提供隐私性。
-
使用Everipedia的解决方案,您不能在一笔复杂类型交易中通过组合多个UTXO的方式来生成单个或多个新的输出。因此,无法进行CoinJoin类型的匿名化。
-
Everipedia UTXOs不是唯一的,而且是可变的。pEOS的 UTXOs完全遵循比特币、Monero等使用的 UTXO 定义。
-
Everipedia 的模式下,需要跟踪每个帐户的 nonce,因为它需要对UTXOs发生的突发变化进行排序。如果你需要以太坊风格的会计系统,Everipedia 是最好的选择。
-
转账的顺序可能出现问题。
-
Everipedia 的 UTXO 模式下,使用中间代币 -- IQ_UTXO 代币而不仅仅是IQ。pEOS直接对代币进行处理,而不需要额外的代币。
这两种实现方式,有各自适用的场景。Everipedia 可以提供简单的记账方式、简单的钱包处理方式和假名的特性。但如果需要实现 CoinJoin、RingCT、MimbleWimble 等算法,Everipedia代码将无法提供支持。
pEOS 团队认为,他们所提出的这一实现,是对于原始的比特币类型的 UTXO 模型的完全复制,因此,能够具备同样的对于所有隐私算法的支持,从而实现真正的匿名性。
代码介绍
pEOS 所发布的这一代码库,是早先的一些实现,包含了两部分:合约和命令行。
合约部分
合约部分,在标准代币协议的基础上增加了两个操作: loadutxo
和 transferutxo
.
借助于 loadutxo
操作,用户能够从常规的 EOS 账号中接受资金以创建新的 UTXO,而借助于 transferutxo
, 用户可以创建完整的UTXO类型的交易。
正如比特币的情形一样,这些 UTXO 的交易,会包含若干个UTXO作为输入,而且生成若干 UTXO 的输出结果。
命令行工具: clpeos
代码库中的另外一个文件夹中,包含了命令行工具 clpeos
,可以用于进行绝大部分的交易操作,比如向新地址转账,向常规的 EOS 账号转账等。
借助于该命令行工具,可以使用EOSIO 代码库中所带的 EOSIO 钱包进行密钥管理,所以,必须要安装对应的应用并进行设置。最好是新创建钱包,用于存储测试 pEOS 相关的密钥。
注意,此处所说的钱包,是指的 keosd
该程序。
在测试网络上试用
pEOS 将合约部署到了 Jungle 测试网络上,见: https://jungle.bloks.io/account/netpeostoken
首先,将 pEOS 的代码库 down下来:
git clone https://github.com/peosdev/utxo
可以看到文档结构为:
image.png进入到 cmd 文件夹:
cd utxo/cmd
其中的 clpeos 命令行工具,就是下文中所用到的了。
image.png(下文所用到的账号和命令的截图,来自 pEOS 的文章,特此说明)
查看
在配置好了钱包和导入对应的jungle测试网络的密钥之后,可以用 clpeos
查看账号的余额信息:
image.png./clpeos balance
查看 UTXO 信息:
image.png./clpeos balance -u
可以看到钱吧中总共有 98 pEOS, 来自两个 UTXO,如图所示。
转账
向某个地址 EOS8Dj5BLdUe1iAi6xNJnZ3bvNEMxDHX6bf4DGesA8USTwj4byJES
转账 11 个 pEOS
这一转账提交成功后,再查看一下账户中的 UTXO 信息:
image.png实际上,转账过程中,将原来的两笔 UTXO 花费掉,而新生成了两笔 UTXO。其中一笔属于转账接收者,而另外一笔 UTXO, 用于表示转账发起者的账户中的资产信息。如上图所示,就是表示的属于发送者的 UTXO,可以见到还有 87 pEOS 的代币。
熟悉比特币交易方式的同学,对此应该不陌生。
除此之外,还可以从 EOS 账户转账,也可以向 EOS 账户发起转账,pEOS的工具会调用相关的合约命令,实现这一转账操作。
接受 pEOS
这时候可能你会问了:那么,我应该如何通过 UTXO 这种方式接收代币呢?
./clpeos receive
使用该命令,会生成一个 EOS 地址:
image.png你可以将此地址发送给对方,接收来自对方的转账。注意,如果使用该地址接收转账,对方也需要同样使用 clpeos
的命令工具来发起才可以。
该工具还可以有更多的一些特性,不过出于篇幅原因,在此就不多做介绍了。可以自己实验玩玩。按照 pEOS 的介绍,它可以输出不进行传输的交易,并对已经组成的交易进行中继。
(这部分特性我还没试过,如果你感兴趣或者试过,可以教教我)
小结
本文基于 pEOS 的博客文章,介绍了 pEOS 的 UTXO 模式,并展示了如何使用相关的命令行工具 clpeos
进行交易转账。
本文不构成任何投资建议,本人也不为任何项目提供任何类型的背书,仅为介绍信息供读者参考,如有投资,风险自担。
感谢你的阅读。
网友评论