Retric
专业贴膜。
写了 199 篇文章
Grin怎么转账?盘点四种转账方法和钱包插件
发表于 2019-01-11 17:06:43

大家都知道,Grin通过实现MW协议,试图打造更注重交易隐私性的数字货币。在比特币里,所有的数据都是公开的。你要给人转一笔钱,是通过确定对方的地址和交易金额,然后签署交易,并且把这笔交易广播到整个网络来创建交易的。

在 MW 协议里,交易数量被隐藏起来了,发送方和接收方则必须一起工作,在信息广播到网络之前先制定交易。而且,Grin的系统里是没有地址的,它通过CoinJion(简单点说,就是在UTXO里把把多个输入和多个输出合并成一个,这样就把很多人的转账信息合并隐藏起来了)的技术,还可以把很多中间交易信息删除——比如张三给李四转了一笔钱,李四又把这笔钱转给了王五,那么最后Grin会直接把李四的交易删除,只保留张三转给王五的交易记录。

这样有什么好处呢?一来是中间交易很难被追踪,隐私性更强;二来是需要保存的数据也变少了,这样节点变轻了,更多人加入进来当节点也就更容易了,于是更分布式了。

那么一个有意思的问题来了,既然没有地址,Grin是怎么转账的?

Grin在github上有一个如何使用钱包的wiki,基本包括了需要的信息,可以参考https://github.com/mimblewimble/docs/wiki/How-to-use-the-Grin-wallet

这篇文章里我们来简单概括下现有的4种转账方法。

四种转账方式

通过Grin钱包转账,都是在自己机器上已经运行了一个Grin节点的前提下,使用命令行输入命令来完成的。

有两种转账方式:

1、实时转账:通过钱包监听的ip地址和端口

在命令行里输入

grin wallet send -c 0 -d http://<IP>:<PORT> 转账金额

就可以完成一笔转账。这个前提是你需要知道对方的钱包监听地址,就是上面命令里的这串信息:http://<IP>:<PORT>,并且双方的钱包都需要实时在线。

可能有人会问,那你用这个ip地址来转账,跟比特币的钱包地址有什么区别吗?我觉得一方面是你给这个IP地址转账,IP地址的信息是不会被记录到交易里去的,也没有人可以查到,除此之外,你可以在不同的ip地址,或者修改不同的端口来运行你的钱包,让钱包来监听转账事件(比如直接换台电脑、换个网络)。这个地址和端口都是可以修改的,也不跟你的钱包绑定在一起。

2、离线转账:通过传输文件

如果你不知道对方的钱包监听地址,或者对方没有在线,那你可以选择用文件的方式来转账。这种转账方式有点像是,你写了一份合同,然后把合同寄给某个人,对方确认过后签上自己的信息,再把合同寄回给你,你拿到合同后,交易就生效了。

类似双方都需要进行确认的特殊“支票”。

文件转账的好处是,文件的传输方式本身可以非常灵活,通过任何媒体、任何软件、任何渠道来传,同时支持离线进行。

更详细的原理是这样:

  1. 发起转账的人首先产生一个包含部分转账信息的文件,然后可以把这个文件以任何合适的方法发送给收款人,比如通过电子邮件、dropbox、pastebin、微信等等。
  2. 接收方收到这个文件,然后把自己的一部分信息添加到文件中来帮助完成交易。这一步又会生成一个文件,接收方再把这个文件返回给发送方。 
  3. 发送方接收到收款人发回的这个文件,确认交易完成。这笔交易也会通过节点自动广播到网络里。

文件里会包含公钥信息,如果泄露出去可能会影响交易涉及到的金额,但不会泄露任何私钥信息。

上面的每个步骤都可以使用命令行完成:

# 1. Generates <filename> to send 10 grins 
grin wallet send -m file -d <filename> 10 
# Send <filename> to the receiver 

#2. Receiver adds their information, generates <filename>.response to provide to the sender 
grin wallet receive -i <filename> 

# 3. Sender finalizes the transaction, which gets broadcasted 
grin wallet finalize -i <filename>.response

当然,这种方式的坏处也很明显。还是比较蛋疼,两个文件要互相传来传去,对用惯了比特币的人来说,还是不那么方便的。

3、钱包插件工具

上面两种转账方式既然都这么麻烦,Grin又是个社区化的货币,肯定会有开发者来做更好用的钱包插件的。

我特意在github上搜了下,找到一个项目叫wallet713,是一个开源的Grin钱包插件,不知道跟Grin官方有没有直接关系。

wallet713也是要求你在本地运行一个Grin节点,但相比于原生钱包,它自己实现了一些优化,虽然也是基于命令行来操作的。

wallet713的原理是通过713.grinbox来做一层relay,通过公私钥来确认你的身份,确保其他人无法查看你的交易。你的ip地址连接到这层relay上进行转账,你的公钥就是你的地址。然后713.grinbox本身不会存储任何数据。

它有这么几个好处:

wallet713目前还在开发中,应该会跟随Grin主网一起上线。我还没有试用过,不知道具体安全性和易用性如何,感兴趣的朋友可以自己探索。

4、不用命令行的界面工具

我在github上还找到了一个工具,是一个用Angular写的Grin钱包的web UI,叫grin-web-wallet

grin-web-wallet 还是需要你在本地运行一个节点。启动原生钱包监听,然后打开浏览器查看 http://localhost:4200 ,就可以看到可视化的钱包界面。

对小白用户来说,用浏览器进行转账会更方便直观一些,毕竟习惯用命令行工具的人还是少数。不过这个工具还没来得及实测,不知道能不能work。

(完)


专业贴膜。
写了 199 篇文章

评论

this comment section is using the amazing decentralized database engine - Gun.db

推荐阅读

EVM是一个生命体「DAY ONE」
区块链起源:the origin of blockchain
Fred Wilson:为什么我不同意巴菲特与查理芒格对比特币的看法
公链的误区:如果原生代币不能捕获平台上其他资产的价值,这条链就是空中花园
两种layer2扩展方案:详解「状态通道」与「Plasma」的优缺点及其攻击模型
智能合约的真相:理想很美好,现实很残酷