Skip to content

palletone/adaptor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

adaptor

Abstract Blockchain Adaptor for PalletOne

Build Status Coverage Status

IUtility 通用操作接口

通用接口包含了最基本的钱包和区块链的操作。钱包操作就包括公私钥的生成和地址的生成,区块链的基本操作就包括对区块和交易的构建查询。 另外为了跨链时地址的映射,有一个特殊的接口:GetPalletOneMappingAddress,用于从链上取的链上地址与PTN地址的映射。

ICryptoCurrency Token操作接口

Token操作相关接口主要包含获取Token基本信息(小数精度),获取某个账户的余额,查询Token转账历史记录,构建转账交易,构建多签锁定地址等。

ISmartContract 智能合约操作接口

包括智能合约的安装、部署、调用和查询。除了查询不需要构造交易外,其他合约操作都是构造了未签名的交易,然后交给IUtility接口中进行签名和发送。

Token跨链的实现

BTC跨链

充币(BTC换PBTC)

  1. 用户使用比特币钱包,获得一个比特币公钥,并传入PalletOneBTC充币合约,获得一个多签地址。
  2. 用户使用PalletOne钱包,获得一个PalletOne地址。
  3. 用户用自己的ETH钱包账户调用多签合约的PTNAddress映射函数,将ETH地址和PTN地址映射,ABI
  4. 用户用自己的比特币钱包,转对应数量的BTC到多签地址。
  5. 用户到PalletOneBTC充币提币合约中,调用提取PBTC的方法,该方法逻辑如下:
    1. 根据当前调用者的PTN地址,调用Adaptor的GetPalletOneMappingAddress,获得对应的ETH地址
    2. 调用GetAddrTxHistory获得该地址往多签地址的转账记录
    3. 查询StateDB,如果是新的转账,则转对应PETH给用户
    4. 更新StateDB,标记该TxID为已处理

提币(PBTC换BTC)

  1. 用户使用BTC钱包,获得一个BTC钱包地址。
  2. 用户将PBTC转账到PalletOne BTC提币合约,并调用了申请提币函数,陪审团调用Adaptor的CreateTransferTokenTx,生成一个从多签地址转账到用户地址的交易,并记录到StateDB。
  3. 用户调用PalletOne BTC提币合约的提币函数,陪审团验证并处理提币请求,
    1. 查询StateDB,找到未签名的交易
    2. 调用SignTransaction,生成签名
    3. 收集陪审员的签名,并调用BindTxAndSignature,生成一个签名的交易
    4. 更新StateDB,将提币金额更新
    5. 陪审员调用SendTransaction,将签名后的Tx广播到比特币网络

ETH跨链

充币(ETH换PETH)

  1. 官方发布一个多签合约到以太坊,该合约提供了函数:ABI
  2. 用户使用PalletOne钱包,获得一个PalletOne地址。
  3. 用户用自己的ETH钱包账户调用多签合约的PTNAddress映射函数,将ETH地址和PTN地址映射,ABI
  4. 用户用自己的ETH钱包,转对应数量的ETH到多签地址。
  5. 用户到PalletOne充币提币ETH合约中,调用提取PETH的方法,该方法逻辑如下:
    1. 根据当前调用者的PTN地址,调用Adaptor的GetPalletOneMappingAddress,获得对应的ETH地址
    2. 调用GetAddrTxHistory获得该地址往多签地址的转账记录
    3. 查询StateDB,如果是新的转账,则转对应PETH给用户
    4. 更新StateDB,标记该TXID为已处理

提币(PETH换ETH)

  1. 复用充币对应的那个以太坊多签合约
  2. 用户将PETH转账到PalletOneETH提币合约,并调用了申请提币函数。
  3. 用户使用ETH钱包,获得一个ETH钱包地址,然后调用PalletOne ETH提币合约的提币函数,传入ETH地址
  4. 陪审团验证并处理提币请求,
    1. 调用Adaptor的CreateTransferTokenTx,生成一个交易,
    2. 调用SignTransaction,生成签名
    3. 收集陪审员的签名,并调用BindTxAndSignature,生成一个签名的交易
    4. 更新StateDB,将提币金额更新
    5. 由某个广播节点,将签名后的Tx广播到以太坊网络
  • 【注意】由于ETH的充提币地址是多用户共用的,所以不能像交易所充提币那样,由其他用户代充值,必须是自己以太坊钱包进行转账充值。