-
Notifications
You must be signed in to change notification settings - Fork 4
moonet_zh
Usechain 是全球首个隐身镜像区块链, 实现链上地址与真实身份的对应和隐私保护。Usechain 在延续区块链匿名性的传统上,通过身份映射赋予区块链合法性,从根本上推动了未来大规模区块链应用的落地。 金融领域是 Usechain具有天然优势的落地场景。真实身份的映射与隔离满足了金融活动的合法性要求,基于从底层到顶层的技术创新,降低技术门槛,促进去中心化应用的真正落地。Usechain将致力于构筑区块链世界中的华尔街。
Usechain测试链于2018年10月上线。目前主要实现了身份的验证,加密算法,隐身功能,委员会,RPOW算法的第一版和区块浏览器等。 Moonet 随着2019年3月31日主网alpha上线同步更新,增加了身份上链,信用等级设计,修改了RPOW协议,委员会等。
Usechain基于以太坊开发,做到了和以太坊很好的兼容性。大部分操作,如果没有特殊说明,可以参考以太坊的文档.
未来我们将针对身份进行更好的优化,实现更高的交易性能 8000 并且提供基础的身份和基础金融功能。以支撑起大规模的生态应用。
本文档的官方地址为 https://github.com/usechain/doc/wiki, 其他官方维护的文档也会有同步,但不一定是最新。
- 有一定基础的区块链开发者
- 关心Usechain进展的用户,但可能存在读不明白的地方,跳过即可。
目前测试网运行了20多个节点。我们可以下载相应操作系统的版本,加入测试网测试,或者自建私网进行测试。
欢迎对Usechain感兴趣的开发者和用户,参与到社区建设中来,为社区贡献自己的智慧。社区会吸收表现突出的人员,对其进行相应的奖励,或者提供一起工作的机会。
- 源码 go-usechain
- 讨论区 discord
- bug和需求提交,请直接在 github 的 issues 中提交。
- CPU 单核1GHZ以上
- 空闲内存 4GB以上,推荐8GB
- 网络带宽 1MBps以上
- 硬盘 10GB以上空余硬盘
欢迎提供兼容性问题报告和操作测试文档。
- Mac OSX 10以上
- Redhat/Centos 6以上
- Ubuntu 14.4以上
- Windows 7以上
- 其他Linux发行版
编译环境可能需要以下的依赖
- go 1.9以上
- node.js 8.11以上
- npm 5以上
- python 3.5以上
- bash
- git
账号和地址在本文中是同一概念。账号和地址都是账号地址的简称。所以在本文中混用。如一次性账号,等同于一次性地址。
本入门如未特别说明,都是在执行./used 后的console中执行命令。 演示命令都是在ubuntu 18.04上测试通过。
这一步会拿到CA证书。测试网不做人工审核,自动获取证书。 在操作系统命令行中执行如下命令:
$ ./used verify --id=[your id number] --photo=[your photo path]
# Then you will see idKey in your terminal.
$ ./used verify --query=[idKey]
进入console
$ ./used --networkid=2 console
为了私密性,我们的账号分为一次性账号,主账号,子账号。一次性账号仅用于向Usechain区块链发送证书认证。
主账号由一次性账号生成,子账号由主账号生成。普通用户无法追踪这些账号之间的关系。
本文进行如下约定:
- 设eth.accounts[0]为一次性账户
- 设eth.accounts[1]为主账户
- 设eth.accounts[2]为子账户
进入console后,可以执行下列命令。
一次性地址(一个):
> personal.newAccount()
主地址(一个):
> personal.newABaccount(eth.accounts[0])
子地址(可以生成多个):
> personal.newABaccount(eth.accounts[1])
> personal.newABaccount(eth.accounts[1])
> personal.newABaccount(eth.accounts[1])
进入console后,可以用admin.addPeer()加入测试网。
> admin.addPeer("enode://6289703f7cd8f370c1e7a822c164d733de27e549e0c3dc18cb21db174dec475ac65f10dba1a68809d7f9c5b19fb50366538ec5b2e541dc619c0e6acac1c25daf@39.107.67.179:30303")
true
访问 http://moonet.usechain.net/#/gettoken ,输入需要获取代币的地址,获取测试币,用于向Usechain公链测试网注册。每次可以获取10个USE。
用户需要先认证注册,才能成为不受限用户。
必须在console按顺序进行。
在console设置验证合约地址变量。
> sc="0xfffffffffffffffffffffffffffffffff0000001"
- 一次性账号注册
> use.sendOneTimeTransaction({from:eth.accounts[0],to:sc,gas:'0x332423'})
- 主账号注册
> use.sendMainTransaction(eth.accounts[0],{from:eth.accounts[1],to:sc,gas:'0x332423'})
- 子账号注册
> use.sendSubTransaction(eth.accounts[1],{from:eth.accounts[2],to:sc, gas:'0x332423'})
Hui是Usechain公链token的基本单位。USE是Usechain公链的普通单位,1 USE等于10^18 Hui.
> eth.sendTransaction({"from": eth.accounts[1],"to": eth.accounts[2], "value":web3.toHui("100", "USE")})
- 注册矿工
use.minerRegister({from: eth.accounts[1]})
- 挖矿
开始挖矿
> miner.setUsebase(eth.accounts[1])
> personal.unlockAccount(eth.coinbase, passphrase, 5000000)
true
> miner.start(2)
停止挖矿
> miner.stop()
- 可以在区块链浏览器中查询transaction或者address
- 可以在console中查询transaction或者address
> eth.getBalance(address)
> eth.getTransaction(txHash)
go-usechain客户端也被称为used,是用Go语言实现的运行Usechain节点的命令行接口。通过安装和运行used,用户可以参与并体验Usechain的区块链网络并:
-
完成身份认证和注册
-
生成一次性账号,主账号,子账号
-
通过挖矿获得Usechain代币
-
完成账户之间的转账
-
创建智能合约并发送交易
-
查看区块历史信息
Website: http://www.usechain.net/
GitHub: https://github.com/usechain/go-usechain
Discord: https://discord.gg/33ZTkV3
测试网: http://moonet.usechain.net
需要先在本地配置好Go语言和git环境, 8000 议Go语言版本为1.10,git使用最新版本(如果出现编译失败的问题,可能是go版本过高,可将go语言版本调整至1.9或1.10)
之后从官方github下载usechain源码:
$ git clone http://git.usechain.cn/usechain/go-usechain.git
进入go-usechain目录:
$ cd %GOPATH%/src/github.com/usechain/go-usechain
编译used:
$ go install -v ./cmd/used
编译得到的used文件位于%GOPATH%/bin目录下
配置好Go语言和git环境后下载源码,进入go-usechain目录后,直接使用make used命令编译即可
编译得到的used文件位于 go-usechain/build/bin 目录下
用户可以按照上述说明,自行从源码编译生成used文件,Usechain团队也在其github上提供了各操作系统版本的二进制下载。得到可执行的used文件之后,用户可以进行节点的初始化和启动操作。
Windows和Linux操作系统下的操作一致如下:
首先设置使用build/config文件下的genesis.json文件进行init操作:
$ ./used --networkid=2 --datadir=usechainData init ./genesis.json
之后启动节点:
$ ./used --networkid=2 --datadir=usechainData --rpc --rpcaddr=0.0.0.0 --rpcapi "eth,use,net,web3,txpool" --rpccorsdomain '*' console
- 生成普通账户地址
> personal.newAccount("passwd")
- 进行挖矿
首先需要对账户进行解锁操作
> personal.unlockAccount(eth.accounts[0],"passwd")
- 注册矿工
> use.minerRegister({from: eth.accounts[0]})
- 启动挖矿
> miner.start()
- 停止挖矿
> miner.stop()
- NodeIP:
- 39.105.102.190
- 39.105.89.191
- 39.107.67.179
["enode://3b56784fb7c72963a78301de99cc51f79439f4acdb0473ef71d05d1f6ed4dc5eaa9d3413dcb2befc869ce5c9ec1c97125fe664eb45563607a41ee52437cfe497@39.105.102.190:30303", "enode://d53bb4ef27ca41ef397464ad41930d69f029001e9a75ef1d93a1694788f32093748a67c0b0b8d955827bc10dd55567c94b09be238578f8d2d90065f866467647@39.105.89.191:30303", "enode://6289703f7cd8f370c1e7a822c164d733de27e549e0c3dc18cb21db174dec475ac65f10dba1a68809d7f9c5b19fb50366538ec5b2e541dc619c0e6acac1c25daf@39.107.67.179:30303"]
Usechain 中,账户地址分为一次性地址、主地址、子地址。
一次性地址是指用户第一次申请验证地址而产生的中间地址,一次性地址发送交易同时带着用户的身份证书到身份验证合约中进行验证。每个用户只能产生一个一次性地址。一次性地址除了做验证交易,无法进行其他交易,也无法接收虚拟货币。
主地址是指以一次性地址作为父地址而产生的从地址,每个一次性地址仅能产生一个主地址,也意味着每个用户只能拥有一个主地址。主地址可以用于参与挖矿、社区投票等功能。
子地址是指以主地址或者子地址为父地址而产生的从地址,子地址的产生没有限制,任何非一次性地址可以产生无数个子地址。
每个地址对应公钥和私钥,每个 Usechain 由公钥做 Hash 运算,取公钥 Hash 的后 20 字节,每对公私钥都被加密存储到 Keystore 中。存储地址文件在节点数据存储目录的 keystore 子目录中。
安装 used 客户端后,可按照如下方式生成地址。
$ used account new
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase:
Address: {5cb3fe4272240e8a0d99fcabf7d4eda213ae0230}
> used --networkid=2 console 2>>usechain.log
> personal.newAccount()
Passphrase:
Repeat passphrase:
"0x9dd3ce8a01c4ec57f7df8afb9052ffa777d609b1"
> eth.accounts
["0xad4ab8ec514f94655c8c350f2c0791c6371b4161", "0xb8f720b0cb6175eb34fc430aa0ccb2c62ae4c052", "0x9dd3ce8a01c4ec57f7df8afb9052ffa777d609b1"]
比特币、以太坊等现有的区块链系统使用了挖矿来产生区块,挖矿本身是可以产生激励的。基于分布式共识算法(POW) 选取总难度高的区块。由矿工打包使用者发送的交易,产生区块,其他节点验证区块的合法性。
Usechain 在的共识机制与 BitCoin、Ethereum 有相似之处,工作量证明算法的意义在于需要找到一个随机数,使得整个区块符合难度要求。
RPOW共识算法是基于POW算法进行的优化,目前实现的基本结构是对区块头部分信息用矿工的私钥进行签名截取,得到特殊字段MinerTag,MinerTag与矿工的coinbase地址二进制字符串匹配个数达到一定阈值后,获得难度降低。 矿工参与挖矿,必须进行注册。为了测试方便和用户使用,如果是链上无注册矿工时,任何人都可以参与挖矿。且目前没有要求挖矿地址必须是主地址。
使用所给密码解锁 Keystore 中的账户。
解锁的格式如下,密码和解锁时间是可选的。
Client | Method |
---|---|
Console | personal.unlockAccount(address, passphrase, duration) |
JSON-RPC | {"method": "personal_unlockAccount", "params": [address, passphrase, duration]} |
> personal.unlockAccount(eth.coinbase, passphrase, 500)
true
测试网中,不需要进行矿工注册,任何人都可以参与挖矿。
如果需要注册矿工,则向矿工注册合约发起注册申请,矿工发送一笔注册交易。
Client | Method |
---|---|
Console | use.minerRegister({from: address}) |
JSON-RPC | {"method": "use_minerRegister", "params": [{from: address}]} |
> use.minerRegister({from: address})
主网中挖矿需要注册矿工 身份,测试网中不需要注册就能挖矿。
开启 CPU 挖矿,可以选择填入开启挖矿的线程数。
Client | Method |
---|---|
Console | miner.start(threads number) |
JSON-PRC | {"method": "miner_start" 8000 , "params": [number]} |
> miner.start(2)
停止 CPU 挖矿。
Client | Method |
---|---|
Console | miner.stop() |
JSON-PRC | {"method": "miner_stop", "params": []} |
> miner.stop()
true
与矿工注册相对应,如果需要注销矿工操作,需要向矿工注册合约发起注销申请,同样是发送一笔交易。
Client | Method |
---|---|
Console | use.minerUnRegister({from: address}) |
JSON-PRC | {"method": "use_minerUnRegister", "params": [{from: address}]} |
> use.minerUnRegister({from: address})
Usechain的核心是具有身份认证的隐身区块链公链,是整个身份链生态架构的基石。与其他区块链应用强调匿名性不同,Usechain链上地址将会是经过验证的,有唯一的实体与之对应。
Usechain 链上的地址将会是经过身份验证的,但是使用 Usechain 的过程中并不会暴露个人的身份隐私信息。在身份验证模块,会平衡第三方身份验证机构的专业性和网络组织的去中心化特性;同时会采取主从地址、环签名、门限密钥分享和身份数据加密技术保护用户的身份隐私,只有在使用者授权或者社区投票公裁决定的情况下,才可以获取到该自然人的相关身份信息。
整个身份验证的过程中除了用户自身外主要涉及到三种角色:第三方CA机构、身份验证合约以及UseChain身份链委员会。每种角色主要的功能如下:
-
CA机构:审核用户的个人身份资料,给用户颁发个人身份证书。
-
身份验证合约:验证一次性账户信息,存储身份验证请求信息,记录地址验证状态。
-
委员会:验证主地址和子地址的有效性,更改身份验证合约中用户的验证状态。
Usechain 账号包括一次性地址、主地址和子地址。
-
一次性地址是指用户第一次申请验证地址而产生的临时地址,一次性地址发送交易同时带着用户的身份证书到身份验证合约中进行验证。每个用户只能产生一个一次性地址。一次性地址除了做验证交易,无法进行其他类型的交易,因而无法接收和发送虚拟货币。
-
主地址是指以一次性地址作为父地址而产生的从地址,每个一次性地址仅能产生一个主地址,也意味着每个用户只能拥有一个主地址。主地址可用于参与挖矿、社区投票等功能。
-
子地址是指以主地址或者子地址为父地址而产生的从地址,子地址的产生没有数量限制,任何非一次性地址可以产生无数个子地址。
主地址是用户的主账户,在用户创建客户端生成钱包时创建,每个用户有且仅有一个主地址,和身份一一对应,主地址采用椭圆曲线 Secp256k1 生成公私钥对,再用公钥生成地址。主地址与副地址都要通过验证才能发起交易。副地址数量不限,根据用户需求而生成,副地址生成要使用到用户的主账户公钥。和主地址分开保存;副地址和主地址的依赖关系不可见。
生成示例
一次性地址(一个):
> personal.newAccount()
主地址(一个):
> personal.newABaccount(eth.accounts[0])
子地址(可以生成多个):
> personal.newABaccount(eth.accounts[1])
> personal.newABaccount(eth.accounts[1])
> personal.newABaccount(eth.accounts[1])
-
UseChain 会和全球著名的身份认证CA中心进行合作。用户向CA认证提交个人身份认证资料,CA机构在审核资料合法且有效后,会向用户颁发权威的身份认证证书。身份认证证书本身不包含任何个人信息。
-
在拿到身份认证证书之后,用户可以产生一个 UseChain 一次性地址,从该地址发送交易至身份验证合约,交易数据包含身份认证证书信息和证书对应的私钥的签名。身份认证合约在校验交易和证书合法后,将一次性地址的状态改为已经通过验证。
-
在一次性地址产生之后,用户可以通过一次性地址来生成一个主账户地址,从主账户地址发送交易到身份验证合约,交易数据包括由一次性地址产生的环签名和主地址公钥信息。合约存储交易信息,委员会通过读取合约数据,验证环签名是否有效,同时验证主账户地址是否是由某个合法的一次性账户产生的。验证通过后,委员会成员通过多重签名的方式更改合约中主地址的认证状态,将其改为合法。
而子地址的验证则和主账户验证比较类似,区别在于环签名无需一次性账户产生,任何合法的主账户地址和子账户地址都可签署。
用户在拿到合法身份证书后,导入到 UseChain 节点客户端中。用户可以点击生成一个一次性地址,产生过程与以太坊普通地址类似,基于椭圆曲线加密标准,调用 use.sendOneTimeTransaction
接口发送交易。
当一次性账户认证交易进入 UseChain 节点客户端交易缓冲池时,会校验交易的正确性,无效的交易会被直接抛弃,节点客户端不会进行转发,这些无效交易也无法纳入到区块中。主要验证交易的交易费、交易签名、目标地址、数据格式、ABI正确性、证书私钥签名有效性以及身份认证证书是否由CA机构颁发的。
- 设 eth.accounts[0] 为一次性账户
- 设 eth.accounts[1] 为主账户
- 设 eth.accounts[2] 为子账户
> use.sendOneTimeTransaction({from:eth.accounts[0],to:sc,gas:'0x332423'})
在用户产生一次性账户后,可以进行主账户的验证。
从主账户发送主账户认证交易到身份认证合约,交易的 payload 段数据信息包括:环签名、公钥镜像、合约接口ABI。
环签名的产生流程如下:
- 用户根据主账户密钥对
(pk, sk)
计算公钥镜像I = sk * Hash(pk)
- 随机选取n-1个合法的一次性地址公钥,和用户公钥pk构成公钥集合:
S = {p1, p2, ..., pk, ..., pn}
- 利用公钥集合
S
对pk
进行签名,生成环签名。
交易打包完成后,节点客户端会校验主账户验证交易的格式是否正确,环签名是否有效以及环签名公钥集合是否均为合法的一次性账户公钥。无效的主账户验证会被直接抛弃。
身份验证合约接收到主账户验证请求后,检查公钥镜像I是否使用过。若已使用,则拒绝主账户验证请求。否则,将主账户交易验证信息存储到合约的存储空间。由于一个地址产生的公钥镜像是唯一的,所以一次性账户只能产生一个有效的主账户。
> use.sendMainTransaction(eth.accounts[0],{from:eth.accounts[1],to:sc,gas:'0x332423'})
子账户的验证流程与主账户比较类似,区别在于子账户的父地址可以是主账户地址或者子账户,同时子账户的公钥镜像可以使用多次。
> use.sendSubTransaction(eth.accounts[1],{from:eth.accounts[2],to:sc, gas:'0x332423'})
Usechain 中,交易是一笔经过地址私钥签名的数据,经过签名的交易可以被节点有选择性地广播到相邻节点,并由相邻节点继续传播,直到被矿工打包进区块。
Usechain 中,交易的合法性验证、合约的执行都需要花费一定的 Gas。发送一笔交易,需要给矿工支付一定的交易手续费,在 Usechain 中,手续费为: TXfee = GasPrice * GasUsed
- from: 发送 USE 的 address
- To: 接收 USE 的 address
- value: 发送 USE 的数量
- 可选参数
- GasPrice: 发送交易的手续费价格
- GasLimit: 一笔交易允许花费的最大 Gas
> eth.sendTransaction({"from": "0xe0f7556cf57751fa447ee0b4a1cfdebf805fb87b","to": "0x3866b65c5dd12bbcba367c45d33677475e44524c","gas": "0x5208", "gasPrice": "0x9184e72a000", "value": "0x874ef557a00f00000"})
"0x507d9671630c1524e76208b08d22cdf74a42d3eb8efebadc0cd9e4d2a163cde2"
Usechain 中,合约是存储在链上的字节码 (bytecode),合约中存储一定的状态 ,合约状态的改变由被矿工打包的一笔交易触发。合约的字节码由支持图灵完备的Usechain 的虚拟机执行计算。合约的字节码一般由高级的语言编写,由编译器编译成可供虚拟机执行的字节码。
Usechain 的虚拟机兼容以太坊的字节码。合约的源码一般类似于:
pragma solidity ^0.4.24;
contract HelloWorld {
function () public {
revert();
}
event SayHello();
function sayHello() public pure returns(string) {
return "Hello, World!";
}
constructor() public {}
}
生成的字节码:
608060405234801561001057600080fd5b5061013f806100206000396000f3006080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663ef5fb05b8114610052575b34801561004c57600080fd5b50600080fd5b34801561005e57600080fd5b506100676100dc565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100a1578181015183820152602001610089565b50505050905090810190601f1680156100ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051808201909152600d81527f48656c6c6f2c20576f726c6421000000000000000000000000000000000000006020820152905600a165627a7a72305820534ba9759bc36d93879fcbeecb1bb3870615cd6058342a77cca4f87cdde8a18e0029
> eth.sendTransaction({"from": "0xe0f7556cf57751fa447ee0b4a1cfdebf805fb87b","gas": "0x2146b", "gasPrice": "0x9184e72a000", "value": 0, "data":"0x608060405234801561001057600080fd5b5061013f806100206000396000f3006080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663ef5fb05b8114610052575b34801561004c57600080fd5b50600080fd5b34801561005e57600080fd5b506100676100dc565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100a1578181015183820152602001610089565b50505050905090810190601f1680156100ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051808201909152600d81527f48656c6c6f2c20576f726c6421000000000000000000000000000000000000006020820152905600a165627a7a72305820534ba9759bc36d93879fcbeecb1bb3870615cd6058342a77cca4f87cdde8a18e0029"})
Submitted contract creation fullhash=0x0a516c8612ab9d8548805080c12b64018cbce18035d576ad6b12791ef1b32c19 contract=0x58e74C32389507DD7d87Dc782434b56b3cA03A13
Usechain 的 Console 是 JavaScript 支持的命令行工具。它载入了 web3.js 文件。可以实现 Usechain 身份认证、RPOW 矿工注册、发送交易等操作。
> eth.getBlock(1691)
{
difficulty: 252742,
extraData: "0xd501846765746888676f312e31302e31856c696e7578",
gasLimit: 823058598,
gasUsed: "0x1976b",
gasuse: 0,
hash: "0xf1494dc23a3b820b767859c2a95aaf247e75dc8ed5a7fe896031670845ce0a2f",
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
miner: "0xe0f7556cf57751fa447ee0b4a1cfdebf805fb87b",
minerNum: 0,
minerTag: "najiaLL8hDWHu8T3KvVVL5daEtg=",
mixHash: "0x2b7ad161801599a7742154462828a5b09c04d420bd6433dfe3e320fbe04285d4",
nonce: "0x2639edb7eb7d1bf4",
number: 1691,
parentHash: "0x10b52550ba4c436fe76f56888f52ef481cde6567250f29ac87a30a44d004f994",
receiptsRoot: "0xe6540dbf1654978c6987f691438078ea05ac7f6b6abcf6cd751cfca29c780a39",
sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
size: 1001,
stateRoot: "0x37d1f6c17500b9f9a406fd7611efc799e4e8533ce6dee4017e8c5d291452b805",
timestamp: 1538053532,
totalDifficulty: 338434314,
transactions: ["0x0a516c8612ab9d8548805080c12b64018cbce18035d576ad6b12791ef1b32c19"],
transactionsRoot: "0x6a2c5f5e59167253276a813bda81cdc6712dba7e8912a90c3c02455bde84fc7c",
uncles: []
}
> eth.getTransaction("0x507d9671630c1524e76208b08d22cdf74a42d3eb8efebadc0cd9e4d2a163cde2")
{
blockHash: "0x75e89b949e44fd045ea1a095414707aa34f698ad23508452f00baed05bea3264",
blockNumber: 1689,
from: "0xe0f7556cf57751fa447ee0b4a1cfdebf805fb87b",
gas: 21000,
gasPrice: 10000000000000,
hash: "0x507d9671630c1524e76208b08d22cdf74a42d3eb8efebadc0cd9e4d2a163cde2",
input: "0x",
nonce: 22,
r: "0x785b1c916773e1a7aa2161938ee28095fba92f73c67c10c9572487b385c95f7c",
s: "0x570b01c35afa8b66ad5d66cd19fd95257a3cfc75ba9da69927427836d58a5f07",
to: "0x3866b65c5dd12bbcba367c45d33677475e44524c",
transactionIndex: 0,
v: "0x1b",
value: 156000000000000000000
}
获取合约的 Code,与生成的字节码对应。
> eth.getCode("0x58e74C32389507DD7d87Dc782434b56b3cA03A13")
608060405234801561001057600080fd5b5061013f806100206000396000f3006080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663ef5fb05b8114610052575b34801561004c57600080fd5b50600080fd5b34801561005e57600080fd5b506100676100dc565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100a1578181015183820152602001610089565b50505050905090810190601f1680156100ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051808201909152600d81527f48656c6c6f2c20576f726c6421000000000000000000000000000000000000006020820152905600a165627a7a72305820534ba9759bc36d93879fcbeecb1bb3870615cd6058342a77cca4f87cdde8a18e0029
通过 web3.js 可以使用 JavaScript 与 Usechain 的节点交互,获取数据。使用 web3.js,需要开启节点的 JSON-RPC 接口。
> used --networkid=2 --rpc --rpcapi="web3, eth, use" console 2>>usechain.log
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
var transaction = web3.eth.getTransaction('0x507d9671630c1524e76208b08d22cdf74a42d3eb8efebadc0cd9e4d2a163cde2');
console.log(transaction);
- Step1:
点击导航栏中
Get Moonet Token
,进入获取测试币页面。
- Step2:
输入框中输入钱包地址,单击
Get Token
- Step3: 提示 Send request successfully! 则获取到测试币
- 方法1:
在
Get Moonet Token
页面右上角的输入框中输入您的钱包地址,点击 搜索按钮🔍。
- 方法2: 在首页导航栏下方的输入框中,输入要查询的地址。
确定后可看到钱包余额。
This is the Wiki for the official Usechain golang implementation.