博客
关于我
区块链第四次作业跨链原子交换交易
阅读量:590 次
发布时间:2019-03-11

本文共 1982 字,大约阅读时间需要 6 分钟。

跨链原子交换交易的实现

在本次实验中,我们需要实现Alice和Bob之间的跨链原子交换交易。这项任务涉及到不同的区块链网络,如BTCTestnet3和Blockcypher的BCY Testnet。以下将详细介绍实验的过程以及所需实现的关键部分。

配置环境

首先,确保环境配置正确。运行以下命令安装所需依赖项:

pip install -r requirements.txt

确保使用Python3执行脚本。

创建密钥并领取测试币

  • 生成并导入密钥

    • 使用keygen.py生成BTCTestnet3和BCY Testnet的密钥,并将其导入keys.py文件。
  • 领取测试币

    • 在Project1测试网中,为Alice的地址领取测试币。
    • 在Blockcypher测试网(BCY)中,注册账户并获取API token。使用curl命令创建Alice和Bob的地址:
      curl -X POST https://api.blockcypher.com/v1/bcy/test/addrs?token=YOURTOKEN
    • 使用curl命令领取测试币:
      curl -d '{"address":"BOB_BCY_ADDRESs", "amount": 1000000}' https://api.blockcypher.com/v1/bcy/test/faucet?token=YOURTOKEN
  • 划分测试币

    使用split_test_coins.py文件,将测试币划分为不同的地址。确保在BTC和BCY网络中分别进行调整,特别注意调用函数和网络类型的适当性。

    完善swap.py

    根据项目要求,填写swap.py中的相关函数。这部分需要结合前面的步骤,确保密钥和地址正确引用。

    核心部分:完善swap_scripts.py

    swap_scripts.py中,实现跨链原子交换所需的脚本,重点完成以下部分:

    1. 创建脚本coinExchangeScript

    实现一个可以由接收者签名和秘密激活的脚本,确保交易只在预定条件下解锁。

    2. 实现coinExchangeScriptSig1coinExchangeScriptSig2

    • coinExchangeScriptSig1:接收方已知秘密X,可以用签名激活交易。
    • coinExchangeScriptSig2:双方签名激活交易。

    实现思路

    结合LSTM脚本语言(如Bitcoin脚本语言),使用OP_IFOP_ELSEOP_ENDIF等操作码来处理不同的解锁条件。

    • coinExchangeScript:检查解锁条件,执行相应的签名验证。
    • coinExchangeScriptSig1:验证秘密X的哈希值,并使用P2PK脚本验证接收方签名。
    • coinExchangeScriptSig2:使用P2MS脚本验证双方签名。

    解锁脚本示例

    解锁脚本1:基于秘密X和接收方签名

    OP_IF  OP_HASH160 hash_of_secret OP_EQUALVERIFY  public_key_recipient OP_CHECKSIGOP_ELSE  public_key_sender public_key_recipient  OP_CHECKMULTISIGOP_ENDIF

    解锁脚本2:基于双方签名

    OP_IF  public_key_sender public_key_recipientOP_ELSE  2 public_key_recipient  OP_CHECKMULTISIGOP_ENDIF

    代码实现

    swap_scripts.py中填充上述脚本。

    def coinExchangeScript(public_key_sender, public_key_recipient, hash_of_secret):    # 返回脚本字节流    return b''def coinExchangeScriptSig1(sig_recipient, secret):    # 返回解锁签名字节流    return b''def coinExchangeScriptSig2(sig_sender, sig_recipient):    # 返回签名验证字节流    return b''

    执行过程分析

    • 解锁脚本1:当秘密X的哈希值正确且接收方签名正确时,交易可执行。
    • 解锁脚本2:当双方提供签名时,交易可执行。

    确保在swap.py中正确调用这些解锁脚本,并结合区块链网络特性,安全完成跨链交易。

    总结

    实现跨链原子交换交易需要深入理解区块链脚本语言和网络机制,正确编写解锁和锁定脚本,确保交易的原子性和安全性。本次实验通过具体的例子和代码实现,展示了如何在不同网络间安全交换加密货币的所有权。

    转载地址:http://vcqtz.baihongyu.com/

    你可能感兴趣的文章
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>
    Mysql8在Windows上离线安装时忘记root密码
    查看>>
    MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
    查看>>
    mysql8的安装与卸载
    查看>>
    MySQL8,体验不一样的安装方式!
    查看>>
    MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
    查看>>
    Mysql: 对换(替换)两条记录的同一个字段值
    查看>>
    mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
    查看>>
    MYSQL:基础——3N范式的表结构设计
    查看>>
    MYSQL:基础——触发器
    查看>>
    Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
    查看>>
    mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
    查看>>
    mysqldump 参数--lock-tables浅析
    查看>>
    mysqldump 导出中文乱码
    查看>>
    mysqldump 导出数据库中每张表的前n条
    查看>>
    mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
    查看>>
    Mysqldump参数大全(参数来源于mysql5.5.19源码)
    查看>>
    mysqldump备份时忽略某些表
    查看>>
    mysqldump实现数据备份及灾难恢复
    查看>>
    mysqldump数据库备份无法进行操作只能查询 --single-transaction
    查看>>