Skip to content
This repository has been archived by the owner on Mar 31, 2020. It is now read-only.

Latest commit

 

History

History
462 lines (360 loc) · 16.6 KB

工具及使用方法.md

File metadata and controls

462 lines (360 loc) · 16.6 KB

由於此文档涉及到账号等敏感信息,文中提到的方法仅供参考

工具

  1. Java Client SDK

文档路径 : file:///(projectPath)/doc/index.html

  1. Sync

GitHub文档

私钥管理

方法1 : 以太坊账号管理

  • 唯链雷神区块链的私钥和地址格式兼容以太坊的私钥和地址。
  • 以太坊的助记词不能在唯链雷神区块链上使用,原因coin type不同,所以无法生成同样的私钥。

如采用以太坊的工具和帐号管理方式,可參照:以太坊账号管理概述

方法2 : Sync

账号模块

子模块 网路 描述
创建 主网 / 测试 允许用户创建一个或多个钱包,此地址为用户在VeChainThor中唯一标示
导出Key Store 主网 / 测试 将Key Store导出。用于钱包恢复
导出私钥 主网 / 测试 将私钥导出。用于钱包恢复
导入 Key Store 主网 / 测试 通过导入Key Store,恢复钱包
导入私钥 主网 / 测试 输入已保存的私钥恢复钱包
助记词恢复 主网 / 测试 输入已记录的助记词恢复钱包

账号界面

界面除导航外分为左右两个区域 区域1:账号导入/创建

  • 钱包列表
  • 创建
  • 导入(keyStore/私钥)
  • 助记词

区域2:账号详情及具体操作

  • 账号地址、余额显示
  • 删除账号
  • 更改交易密码
  • 导出 key store
  • 导出私钥

方法3 : Java Client SDK

API参照: AccountClient
Console参照: Create Wallet

交易构建及签名

交易字段的定义可以参考:https://github.com/vechain/thor/wiki/Transaction-Model

唯链雷神区块链的交易构造时建议有两个参数实时从链上获取

  • chainTag,是创世区块的最后一个字节,用于区分主链,测试链的tag。
  • blockRef,是uint64的变量,交易需要block id的前8字节作为参考。同时也被用于和expiration字段一起来作为交易时间有效性的判断。如果当前blocknumber > blockRef对应对区块高度 + expiration,则该交易被丢弃。

方法1:Sync

交易构建器

界面除导航外,分为上下两个区域: 区域1: 选择需要构建的交易类型

  • Single Transaction
  • Multi Transaction
  • Contract Deployment

区域2: 构建交易内容

  • 由于VeChainThor的特性,增加了一些参数供使用者填写

单笔交易

单笔交易如同以太坊,由一个交易发起人发送一笔交易至一个交易接收者。

字段 说明 备注
from 交易发起地址 -
to  交易接收地址 -
value 转账金额 VET为单位
expiration 用于设置交易过期/失效时间 区块为单位/建议值为18
Block Number ∈[blockRef.number , BlockRef.number + expiration]
maximum gas 允许消耗的gas总量 -

交易子句

一个交易可以包含零个或多个交易子句 ,用户无需借助合约就可在一个交易中执行多个任务;同时保持交易的原子性(原子性是指一个操作是不可中断的,要么全部执行成功要么全部执行失败)。假设为一笔转账交易, 交易子句可以让原先只能一笔交易只能发往一个地址的限制,交易子句可以让一个发起人向多个接收者。

字段 说明 备注
from 交易发起地址 -
expiration 用于设置交易过期/失效时间 区块为单位/建议值为18
Block Number ∈[blockRef.number , BlockRef.number + expiration]
to 交易接收地址 -
value 操作VET数值 -
data 十六进制内容 -

合约部署

将合约部署到VeChainThor网路中

字段 说明 备注
contract deployer 部署合约人 将从account列表中选取
contract Data 部署合约的十六进制内容 用户需自行将要部署的内容转成十六进制格式
expiration 用于设置交易过期/失效 区块为单位/建议值为18
Block Number ∈[blockRef.number , BlockRef.number + expiration] 
Maximum gas 允许消耗的gas总量 单位:Wei

高级参数设置

以下字段皆为可选参数

字段 说明 备注
gasPriceCoef 用户可根据调整该数值调整交易的优先级 默认值为0,取值范围为∈[0,255]
dependsOn  被依赖的交易的ID 若此字段不为空, 則只有当它指定的交易已存在时,此交易才会被执行
blockRef 对之前block的引用, 允许设置交易必须在某个时间之后执行; 可以以度量交易的延迟 SYNC默认获取当前BestBlock的区块ID来生成blockRef;

交易发送

方法1:Sync

当交易构建完成后, 输入消息发出者的密码后,若密码正确后, 即可对交易进行签名


方法2 : Java Client SDK

1.API详见
1.Sign VET transaction
2.Sign VTHO transaction

2.console详见
1.Sign VET transaction

MPP相关

参照:
1.Prototype 2.Prototype Client

额度设定说明

Amount credit = Amount.VTHO();
credit.setDecimalAmount( "12.00" );//用户可使用最高额度(VTHO)上限
Amount recovery = Amount.VTHO();
recovery.setDecimalAmount( "0.00001" );//额度(VTHO)每秒的回复率 

TransferResult result = ProtoTypeContractClient.setCreditPlans(
        new Address[]{Address.fromHexString( "0xD3EF28DF6b553eD2fc47259E8134319cB1121A2A")},
        new Amount[]{credit},
        new Amount[]{recovery},
        ContractClient.GasLimit, (byte)0x0, 720, ECKeyPair.create( "0xeb78d6405ba1a28ccd938a72195e0802dfbe1de463bc6e5dd491b2c7562b5e3f" ) );
logger.info( "set credit plans:" + JSON.toJSONString( result ) );

假设目前交易费用为21VTHO(具体以实际网络参数为准),在设置CreditPlan时可为每位用户每天限制1次操作且隔日恢复。那么可以将CreditPlan的credit 及 ecoveryRate设置如下:

1.credit : 可设置为credit.setDecimalAmount( "21.00" )
2.recoveryRate:  recovery.setDecimalAmount( "0.00024305555" ) // 0.00024305555 = 21 / 86400

1.限制:仅限合约控制者及合约本身可调用此方法
2.对象:合约内所有用户

链上信息查询

方法1: Sync

Insights可让VeChainThor中的数据可视化,并且实时展示。用户可通过以下内容进行链上信息的查询

最新块/区块查询/区块ID

默认进入insights会实时加载最新块查询,若需要查询特定区块ID/区块编号信息,可通过输入进行查询

若有Branch标签,则代表此区块并非在主链上

字段 说明
block number 区块编号
block ID 区块ID
size 编码过的RLP字节大小
parent ID 父区块ID
timestamp  时间戳
total Score TotalScore为从创始块开始,每个blockScore的总和
number of Transaction 区块中所包含的交易数
gas limit  区块消耗的gas总量
signer  区块打包者
beneficiary  区块奖励接收者
txRoot 区块中交易根哈希
stateRoot account state根哈希
receiptsRoot transaction Receipts 根哈希

交易查询

由于Insights为已上链数据查询, 查询到的交易皆有Receipt

若有Branch标签,则代表此区块并非在主链上

Tx Info

字段 说明
txID 交易唯一标识
timeStamp 时间戳
from 交易发起人
block Number 所属区块编号
block Id 所属区块唯一标识
block Ref 引用的区块ID
depends On 引用的交易ID
nonce 随机数
gas 允许消耗的gas总量
expiration 交易过期/失效区块数
gas used by transaction 交易实际消耗的Gas总量
gas price Coefficient 交易系数将会影响交易打包优先级,交易系数∈[0 , 255]
clauses 交易子句总数
to 交易接收人
value 交易数值
data 十六进制信息

Receipt

字段 說明
gas Payer 交易支付者
paid (VTHO) 支付金额
tx Reward (VTHO) 出块节点奖励
outputs 事件日志

地址查询

通过地址查询,可查看地址详情

字段 说明
address 所查询的地址
available VET 可用VET余额
available VTHO 可用VTHO余额
transactions 已发出的交易明细

方法2: Java Client SDK

1.API
详见API
2.Console 详见java console

确认交易

1.获取区块

通过java console指令:

1.java console:
java -jar thor-client-sdk4j-0.0.2.jar getBlock "http://localhost:8669"


2.java api:
//获取最新区块 get best block
Block block = BlockClient.getBlock(Revision.BEST);   
System.out.println(JSON.toJSONString(block));    

或

//获取指定的块 get specified block
Revision revision = Revision.create(148847);
Block block = BlockClient.getBlock(revision);
System.out.println(JSON.toJSONString(block));

  • best block
{
  "beneficiary": "0xafbd76f9cdd19015c2d322a35bbea0480f5d70e1",
  "gasLimit": 10448965,
  "gasUsed": 0,
  "id": "0x00026bfa7cbbd7c8cf643e45eadff1ddce1395cc47a5c08c521498f693381840",
  "isTrunk": true,
  "number": "158714",
  "parentID": "0x00026bf9c0828062b25d0b23df0c99f6571af389d273961b82c90906a0a96b1b",
  "receiptsRoot": "0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0",
  "signer": "0xafbd76f9cdd19015c2d322a35bbea0480f5d70e1",
  "size": 239,
  "stateRoot": "0xa8dd31b95e227b92e800d65c824d2fb124a36e924b398252ec995d3611a69d43",
  "timestamp": 1530016140,
  "totalScore": 1034108,
  "transactions": [],
  "txsRoot": "0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0"
}
  • specified block
{
  "beneficiary": "0x0000000000000000000000000000000000000000",
  "gasLimit": 10000000,
  "gasUsed": 0,
  "id": "0x00000000ef3b214ad627b051f42add3b93b2f913f2594b94a64b2377b0f9159a",
  "isTrunk": true,
  "number": "0",
  "parentID": "0xffffffff00000000000000000000000000000000000000000000000000000000",
  "receiptsRoot": "0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0",
  "signer": "0x0000000000000000000000000000000000000000",
  "size": 170,
  "stateRoot": "0x120df3368f409525ed30fd98c999af8d66bfa553cae14005fc3b7f00bcc60de1",
  "timestamp": 1528387200,
  "totalScore": 0,
  "transactions": [],
  "txsRoot": "0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0"
}

其中transactions字段是该block中所有交易的txID。

2. 获取交易

通过java console指令:

1.java console:
java -jar thor-client-sdk4j-0.0.2.jar getTransaction "0x255576013fd61fa52f69d5d89af8751731d5e9e17215b0dd6c33af51bfe28710"  "http://localhost:8669"


2.java api
Transaction transaction = TransactionClient.getTransaction("0x255576013fd61fa52f69d5d89af8751731d5e9e17215b0dd6c33af51bfe28710", false, null);
System.out.println("transaction"+JSON.toJSONString(transaction));

返回交易信息:

{
id: '0x255576013fd61fa52f69d5d89af8751731d5e9e17215b0dd6c33af51bfe28710',
  chainTag: '0x9a',
  blockRef: '0x0002456e56ae5827',
  expiration: 720,
  clauses: 
    [
      {
      "to": "0xB2ef3293Bb6c886d9e57ba205c46450B6d48A0A1",
      "value": "1234560000000000000",
      "data": "0x"
      },
      {
      "to": "0x0000000000000000000000000000456E65726779",
      "value": "0",
      "data": "0xa9059cbb000000000000000000000000b2ef3293bb6c886d9e57ba205c46450b6d48a0a100000000000000000000000000000000000000000000000000000000000003ff"
       } 
    ],
  gasPriceCoef: 0,
  gas: 100000,
  origin: '0x267Dc1dF3e82E6BdAD45156C7c31Aad36DF2B5Fa',
  nonce: '0x164362fbdd0',
  dependsOn: null,
  size: 224,
  meta: 
   { blockID: '0x0002456fe81e6df0548a327faa3c1764eff7c3b7ce5cf1d1d27264818e78ea8c',
     blockNumber: 148847,
     blockTimestamp: 1529917460 },
   }
}

从返回的transaction信息可以看到交易的具体内容。

3. 获取交易单据

1.java console:
java -jar thor-client-sdk4j-0.0.2.jar getTransactionReceipt "0x255576013fd61fa52f69d5d89af8751731d5e9e17215b0dd6c33af51bfe28710"  "http://localhost:8669"


2.java api
Receipt receipt = TransactionClient.getTransactionReceipt("0x255576013fd61fa52f69d5d89af8751731d5e9e17215b0dd6c33af51bfe28710", null);
System.out.println("receipt"+JSON.toJSONString(receipt));

返回交易单据信息:一个交易中包括两个子句,一个是VET转账,一个是VTHO转账。

{
  "gasUsed": 51462,
  "gasPayer": "0x267Dc1dF3e82E6BdAD45156C7c31Aad36DF2B5Fa",
  "paid": "0x2ca2dc057b7270000",
  "reward": "0xd640ece71d588000",
  "reverted": false,
  "meta": {
    "blockID": "0x0002456fe81e6df0548a327faa3c1764eff7c3b7ce5cf1d1d27264818e78ea8c",
    "blockNumber": 148847,
    "blockTimestamp": 1529917460,
    "txID": "0x255576013fd61fa52f69d5d89af8751731d5e9e17215b0dd6c33af51bfe28710",
    "txOrigin": "0x267Dc1dF3e82E6BdAD45156C7c31Aad36DF2B5Fa"
  },
 "outputs": [
        {
            "contractAddress": null,
            "events": [],
            "transfers": [
                {
                    "sender": "0x267dc1df3e82e6bdad45156c7c31aad36df2b5fa",
                    "recipient": "0xb2ef3293bb6c886d9e57ba205c46450b6d48a0a1",
                    "amount": "0x112209c76de80000"
                }
            ]
        },
        {
            "contractAddress": null,
            "events": [
                {
                    "address": "0x0000000000000000000000000000456E65726779",
                    "topics": [
                        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
                        "0x000000000000000000000000267dc1df3e82e6bdad45156c7c31aad36df2b5fa",
                        "0x000000000000000000000000b2ef3293bb6c886d9e57ba205c46450b6d48a0a1"
                    ],
                    "data": "0x00000000000000000000000000000000000000000000000000000000000003ff"
                }
            ],
             "transfers": []
    }
  ]
}

4. 判断交易是否有效

  • 建议交易确认区块为 12 个区块以上

  • 在区块中的交易说明都被执行了。但交易是否执行成功,可以查看交易单据的reverted字段,如果reverted字段为false,则说明交易被执行成功了。如果reverted字段为true,说明交易执行失败

  • 在交易单据中, Output将会显示此交易所包含的转账信息

    1. VTHO:

    若为转账VTHO,可查看Output中的events,说明如下:

    1. 需确保合约地址0x0000000000000000000000000000456e65726779

    2. Topics中:

      • 条目一为: events调用哈希,需确保哈希值为0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
      • 条目二为: 交易发起方
      • 条目三为: 交易接受方
    3. data: 转账数值,默认返回16进制且数值单位为10^18 (Wei)。 比如上面data的值为:0x3ff = 1023 wei VTHO,即时1023*10^-18 VTHO。

    2. VET:

    可查看Output中transfer数组,其中,将会包含交易发起人、交易接受人、转账金额。sender,recipient,amount

    amount - 默认返回16进制且数值单位为10^18 (Wei)。比如上面单据中transfers的amount为十六进制:0x112209c76de80000,转换为十进制是1234560000000000000 wei,因为VET是18decimal的,所以转换为VET为1.23456 VET

5. 交易费用的计算

唯链雷神区块链交易是消耗gas,gas通过gasPrice转为为VTHO,并通过扣除账户VTHO来进行交易费用的结算。每个交易中包含交易系数(gasPriceCoef), 计算公式为:

VTHO = (1 + gasPriceCoef/255) * baseGasPrice

目前主网设定的baseGasPrice为: 1 VTHO = 1000gas(具体以实际网络参数为准),普通VET转账交易费用是21000gas。如果gasPriceCoef = 0,则: 消耗的VTHO = (1 + 0/255) * 21000/1000 = 21 VTHO

  • 可以通过调整gasPriceCoef来提高交易在masterNode交易池中优先级。比如设定gasPriceCoef = 128,则 消耗的VTHO = (1 + 128/255) * 21000/1000 = 31.5 VTHO