EOS 跨链转账(一)不可撤销块的确认

1.0 什么是跨链转账?

随着区块链技术的火热,出现了大量的区块链企业,也出现了大量不同的链。随之而来的是一个新技术的诞生——跨链技术。
跨链,顾名思义,就是通过一个技术,能让价值跨过链和链之间的障碍,进行直接的流通。那么怎样理解跨链呢?
区块链是分布式总账的一种。一条区块链就是一个独立的账本,两条不同的链,就是两个不同的独立的账本,两个账本没有关联。本质上价值没有办法在账本间转移,但是对于具体的某个用户而言他有需求,一条区块链上存储的价值直接转移到另一条链上,而跨链技术带来的直接好处就是实现价值的流通、分摊转账流量的压力、多链生态的构建。
跨链转账技术是一个比较复杂的技术,目前主流的跨链技术有公证人转账、侧链\中继、哈希锁定、分布式私钥控制,接下来就模拟下以EOS为主链,同时侧链方式实现跨链转账。

1.1 开发环境:

阅读本文前,确定您已经能够启动单节点EOSIO node,如果还不能正确操作,请参考官方WIKI:https://developers.eos.io/eosio-nodeos/docs/autobuild-script
并且对C++宏已掌握,且能够简单修改EOS源码

操作系统:MACOS,EOSIO版本号:V1.1.3

2.1 开发环境搭建:

2.1.1 主链环境搭建:

  • 1)启动主网节点 (单节点)($num是你需要输入的参数 )
    $1表示

cd ~/cactus/cactus_eos/MainChain/build/programs/nodeos
./nodeos --delete-all-blocks --plugin eosio::sidechain_plugin --plugin eosio::client_plugin
--http-server-address 127.0.0.1:8888 --p2p-listen-endpoint 127.0.0.1:8900 --p2p-peer-address 127.0.0.1:9876
--config-dir $4 --data-dir $4 --client-private-key 5K8MzDTmBKfGWE5wDpTcpmMimHH2SzFADjmSkvJe47RWHv3nbke
--enable-send-propose --read-mode=irreversible --side-chain-address http://192.168.31.144:8888 --side-chain-account $1

  • 2)创建账号

echo "跳转到项目目录下,此处需要根据node的实际情况做调整"cd ~/cactus/cactus_eos/MainChain/build/programs/cleos
./cleos wallet unlock -n newb --password ***
echo "创建代币创建账号eosio.token"
./cleos create account eosio eosio.token EOS8GhCnJCnHFDUQhTmfAVun9AfKWp6Puye45uMJZNjYFeDCkc6N1 EOS8GhCnJCnHFDUQhTmfAVun9AfKWp6Puye45uMJZNjYFeDCkc6N1

echo "创建合约发布账号cactus"
./cleos create account eosio cactus EOS8GhCnJCnHFDUQhTmfAVun9AfKWp6Puye45uMJZNjYFeDCkc6N1 EOS8GhCnJCnHFDUQhTmfAVun9AfKWp6Puye45uMJZNjYFeDCkc6N1

echo "创建转账账户"
./cleos create account eosio zhd EOS8GhCnJCnHFDUQhTmfAVun9AfKWp6Puye45uMJZNjYFeDCkc6N1 EOS8GhCnJCnHFDUQhTmfAVun9AfKWp6Puye45uMJZNjYFeDCkc6N1
./cleos create account eosio yc EOS7Kgumj1E1bYeHR73KrNWs8NPrNisy27yvXcmnDC555cXh67E9x EOS7Kgumj1E1bYeHR73KrNWs8NPrNisy27yvXcmnDC555cXh67E9x
./cleos create account eosio sf EOS7Kgumj1E1bYeHR73KrNWs8NPrNisy27yvXcmnDC555cXh67E9x EOS7Kgumj1E1bYeHR73KrNWs8NPrNisy27yvXcmnDC555cXh67E9x

  • 3)部署合约

echo "发布cactus.token 合约"
./cleos set contract cactus ~/cactus/cactus_eos/MainChain/contracts/cactus.msig -p cactus
echo "发布eosio.token 合约"
./cleos set contract eosio.token ~/cactus/cactus_eos/MainChain/build/contracts/eosio.token -p eosio.token

2.1.2 侧链环境搭建:

  • 1)启动侧网节点 (多节点)

./nodeos --delete-all-blocks -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin --plugin eosio::sync_plugin --plugin eosio::client_plugin --plugin eosio::history_api_plugin --http-server-address 192.168.31.144:8888 --p2p-listen-endpoint 127.0.0.1:9876 --p2p-peer-address 127.0.0.1:9877 --config-dir ~/Library/Application\ Support/eosio/nodeos/config --data-dir ~/Library/Application\ Support/eosio/nodeos/data --private-key ["EOS6jVXMxEjCtEGsqBNrZgrN49ReCGsUPGxmGP7Wj4cFVYfphrWdL","5K8MzDTmBKfGWE5wDpTcpmMimHH2SzFADjmSkvJe47RWHv3nbke"] --client-private-key 5JWMfhENjLHQcoLb4EKd6SqnyLVk9ajZPYC4iHA28WjxPvWLAZj --enable-send-propose --peer-chain-address http://192.168.31.167:8889 --peer-chain-account yc

备注:192.168.31.144为侧链IP 192.168.31.167为主链IP

./nodeos --delete-all-blocks --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin --plugin eosio::sync_plugin --plugin eosio::client_plugin --plugin eosio::history_api_plugin --http-server-address 192.168.31.144:8889 --p2p-listen-endpoint 127.0.0.1:9877 --p2p-peer-address 127.0.0.1:9876 --config-dir ~/Library/Application\ Support/eosio/nodeos2/config --data-dir ~/Library/Application\ Support/eosio/nodeos2/data --private-key ["EOS6jVXMxEjCtEGsqBNrZgrN49ReCGsUPGxmGP7Wj4cFVYfphrWdL","5K8MzDTmBKfGWE5wDpTcpmMimHH2SzFADjmSkvJe47RWHv3nbke"] --client-private-key 5JWMfhENjLHQcoLb4EKd6SqnyLVk9ajZPYC4iHA28WjxPvWLAZj --enable-send-propose --peer-chain-address http://192.168.31.167:8890 --peer-chain-account sf

  • 2)创建账号

#解锁钱包
./cleos wallet unlock -n walletsf2 --password PW5HxmbMCPukVX1qWFPD5nowgL5XPgzeFWk9RdNua1oWfue4vfzRq
#创建cactus 账户
./cleos -u http://192.168.31.144:8888 create account eosio cactus EOS6jVXMxEjCtEGsqBNrZgrN49ReCGsUPGxmGP7Wj4cFVYfphrWdL EOS6jVXMxEjCtEGsqBNrZgrN49ReCGsUPGxmGP7Wj4cFVYfphrWdL
#由cactus账户部署合约
./cleos -u http://192.168.31.144:8888 set contract cactus ~/cactus_eos/MainChain/contracts/cactus.msig -p cactus
./cleos -u http://192.168.31.144:8888 set account permission cactus active '{"threshold":1,"keys":[],"accounts":[{"permission":{"actor":"cactus","permission":"eosio.code"},"weight":1}],"waits":[]}' owner -p cactus@owner
#创建转账账户longge
./cleos -u http://192.168.31.144:8888 create account eosio longge EOS6jVXMxEjCtEGsqBNrZgrN49ReCGsUPGxmGP7Wj4cFVYfphrWdL EOS6jVXMxEjCtEGsqBNrZgrN49ReCGsUPGxmGP7Wj4cFVYfphrWdL
#创建sf 账户
./cleos -u http://192.168.31.144:8888 create account eosio sf EOS6jVXMxEjCtEGsqBNrZgrN49ReCGsUPGxmGP7Wj4cFVYfphrWdL EOS6jVXMxEjCtEGsqBNrZgrN49ReCGsUPGxmGP7Wj4cFVYfphrWdL
#创建eosio.token 账户
./cleos -u http://192.168.31.144:8888 create account eosio eosio.token EOS6jVXMxEjCtEGsqBNrZgrN49ReCGsUPGxmGP7Wj4cFVYfphrWdL EOS6jVXMxEjCtEGsqBNrZgrN49ReCGsUPGxmGP7Wj4cFVYfphrWdL
#创建yc 账户
./cleos -u http://192.168.31.144:8888 create account eosio yc EOS6jVXMxEjCtEGsqBNrZgrN49ReCGsUPGxmGP7Wj4cFVYfphrWdL EOS6jVXMxEjCtEGsqBNrZgrN49ReCGsUPGxmGP7Wj4cFVYfphrWdL

3.1 不可撤销块的确认详解:

3.1.1 创建新的plugin:

  • 1)在plugins目录下创建sync_plugin


  • 2)在CMakeLists中注册sync_plugin


3.1.2 设置信号

  • 1)在sync_plugin_impl中注册信号
    分别注册sync_block_transaction_connection和irreversible_block_connection两个信号


  • 2)在chain--controller中触发信号
    分别在controller中的sync_block_transaction中触发sync_block_transaction_connection信号、在controller中的irreversible_block中触发irreversible_block_connection信号


3.1.3 构建所需表结构

构建transaction_reversible_multi_index和transaction_executed_multi_index两张表结构
(构建中涉及到宏的知识点)


3.1.4 设置不可撤销块逻辑代码:


核心代码解析:在侧链同步侧链数据时候,每过来一笔trx,都会校验这笔trx是否是向主网构建的合约中的固定账号转账,若是则说明该笔trx是一笔有主网发向侧网的转账,将这笔交易放入transaction_reversible_multi_index中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容