推荐一个适合新手的以太坊DApp开发教程

回复

分享jimi2018 发起了问题 • 1 人关注 • 0 个回复 • 69 次浏览 • 2018-03-24 20:55 • 来自相关话题

合约脚本api

文档bochen 发表了文章 • 0 个评论 • 257 次浏览 • 2017-08-03 10:23 • 来自相关话题

L0为合约脚本提供以下api可供交互 exporterFuncs.Set("Account", accountFunc)
exporterFuncs.Set("Transfer", transferFunc)
exporterFuncs.Set("CurrentBlockHeight", currentBlockHeightFunc)
exporterFuncs.Set("GetState", getStateFunc)
exporterFuncs.Set("PutState", putStateFunc)
exporterFuncs.Set("DelState", delStateFunc)
具体使用说明如下L0.Account.Address     获取合约账户地址
L0.Account.Sender       获取交易发起方地址
L0.Transfer()               合约内发起转账交易
L0.CurrentBlockHeight()  获取当前区块高度
L0.GetState(key)          获取合约状态变量值 
L0.PutState(key, value)  设置合约状态变量值 
L0.DelState(key)           删除合约状态变量值 查看全部
L0为合约脚本提供以下api可供交互
    exporterFuncs.Set("Account", accountFunc)
exporterFuncs.Set("Transfer", transferFunc)
exporterFuncs.Set("CurrentBlockHeight", currentBlockHeightFunc)
exporterFuncs.Set("GetState", getStateFunc)
exporterFuncs.Set("PutState", putStateFunc)
exporterFuncs.Set("DelState", delStateFunc)

具体使用说明如下L0.Account.Address     获取合约账户地址
L0.Account.Sender       获取交易发起方地址
L0.Transfer()               合约内发起转账交易
L0.CurrentBlockHeight()  获取当前区块高度
L0.GetState(key)          获取合约状态变量值 
L0.PutState(key, value)  设置合约状态变量值 
L0.DelState(key)           删除合约状态变量值

这是一个测试

回复

文档bochen 回复了问题 • 2 人关注 • 1 个回复 • 274 次浏览 • 2017-07-31 18:18 • 来自相关话题

L0白皮书

文档luren5 发表了文章 • 0 个评论 • 411 次浏览 • 2017-07-24 16:56 • 来自相关话题

投票合约

合约开发luren5 发表了文章 • 0 个评论 • 253 次浏览 • 2017-07-24 15:07 • 来自相关话题

以下是一个投票的智能合约示例,所有经过授权的地址都可以参与投票,整个投票过程是透明的、去中心化的
-- 投票系统
local L0 = require("L0")

-- 合约创建时会被调用一次,完成数据的初始化
function L0Init(args)
-- init proposal
local index = 1
local proposal = {}
while(args[index])
do
proposal[index] = {["name"] = args[index], ["voteCount"] = 0}
index = index + 1
end
--local s = serialize(proposal)
L0.PutState("proposal", proposal)

-- set chairperson
local chairperson = L0.Account().Sender
L0.PutState("chairperson", chairperson)

return true
end

-- 每次合约执行都调用
function L0Invoke(func, args)
if func == "giveVoteTo" then
local voterAddr = args[0]
giveVoteTo(voterAddr)
end
if func == "vote" then
local proposalIndex = args[0]
vote(proposalIndex)
end
return true
end
-- 授权
function giveVoteTo(voterAddr)
local sender = L0.Account().Sender
local chairperson = L0.GetState("chairperson")

if(sender ~= chairperson)
then
print("No access")
return false
end

-- get voters
local voters = L0.GetState("voters")
if voters == nil -- not exist
then
voters = {}
else
if(voters[voterAddr] ~= nil)
then
-- print(voters[voterAddr]['givenRightTime'])
print("addr has been given right")
return false
end
end

--restore
voters[voterAddr] = {}
voters[voterAddr]["voteTo"] = -1

L0.PutState("voters", voters)
end

-- 投票
function vote(proposalIndex)
local sender = L0.Account().Sender
-- get voters
local voters = L0.GetState("voters")
if voters == nil
then
print("No addrs have not been given right")
return false
end

-- check if given right
print("sender "..sender)
if voters[sender] == nil
then
print("This addr has not been given right")
return false
end

-- check if voted
if voters[sender]["voteTo"] >= 0
then
print("This addr has voted")
return false
end
-- check proposal index
local proposal = L0.GetState("proposal")

proposalIndex = tonumber(proposalIndex)
if(proposal[proposalIndex] == nil)
then
print("Invalid proposal")
return false
end

-- do vote & restore
proposal[proposalIndex]["voteCount"] = proposal[proposalIndex]["voteCount"] + 1
voters[sender]["voteTo"] = index

L0.PutState("voters", voters)
L0.PutState("proposal", proposal)
end

-- 获取票数最多的, 如有并列取第一个
function winner()
-- get proposal
local proposal = L0.GetState("proposal")
--proposal = deserialize(proposal)

local winnerIndex = 0
local mostVotes = 0
for i, v in ipairs(proposal)
do
local voteCount = v["voteCount"]
if voteCount > mostVotes
then
mostVotes = voteCount
winnerIndex = i
end
end
return winnerIndex
end

-- 每次合约查询都调用
function L0Query(args)
local key = args[0]
if key == "chairperson" then
return L0.GetState("chairperson")
end
if key == "voters" then
local voterAddr = args[1]
local voters = L0.GetState("voters")
local res = voterAddr..","..voters[voterAddr]["voteTo"]
return res
end
if key == "winner" then
return winner()
end
if key == "proposal" then
return "proposal"
end
end 查看全部
以下是一个投票的智能合约示例,所有经过授权的地址都可以参与投票,整个投票过程是透明的、去中心化的
-- 投票系统
local L0 = require("L0")

-- 合约创建时会被调用一次,完成数据的初始化
function L0Init(args)
-- init proposal
local index = 1
local proposal = {}
while(args[index])
do
proposal[index] = {["name"] = args[index], ["voteCount"] = 0}
index = index + 1
end
--local s = serialize(proposal)
L0.PutState("proposal", proposal)

-- set chairperson
local chairperson = L0.Account().Sender
L0.PutState("chairperson", chairperson)

return true
end

-- 每次合约执行都调用
function L0Invoke(func, args)
if func == "giveVoteTo" then
local voterAddr = args[0]
giveVoteTo(voterAddr)
end
if func == "vote" then
local proposalIndex = args[0]
vote(proposalIndex)
end
return true
end
-- 授权
function giveVoteTo(voterAddr)
local sender = L0.Account().Sender
local chairperson = L0.GetState("chairperson")

if(sender ~= chairperson)
then
print("No access")
return false
end

-- get voters
local voters = L0.GetState("voters")
if voters == nil -- not exist
then
voters = {}
else
if(voters[voterAddr] ~= nil)
then
-- print(voters[voterAddr]['givenRightTime'])
print("addr has been given right")
return false
end
end

--restore
voters[voterAddr] = {}
voters[voterAddr]["voteTo"] = -1

L0.PutState("voters", voters)
end

-- 投票
function vote(proposalIndex)
local sender = L0.Account().Sender
-- get voters
local voters = L0.GetState("voters")
if voters == nil
then
print("No addrs have not been given right")
return false
end

-- check if given right
print("sender "..sender)
if voters[sender] == nil
then
print("This addr has not been given right")
return false
end

-- check if voted
if voters[sender]["voteTo"] >= 0
then
print("This addr has voted")
return false
end
-- check proposal index
local proposal = L0.GetState("proposal")

proposalIndex = tonumber(proposalIndex)
if(proposal[proposalIndex] == nil)
then
print("Invalid proposal")
return false
end

-- do vote & restore
proposal[proposalIndex]["voteCount"] = proposal[proposalIndex]["voteCount"] + 1
voters[sender]["voteTo"] = index

L0.PutState("voters", voters)
L0.PutState("proposal", proposal)
end

-- 获取票数最多的, 如有并列取第一个
function winner()
-- get proposal
local proposal = L0.GetState("proposal")
--proposal = deserialize(proposal)

local winnerIndex = 0
local mostVotes = 0
for i, v in ipairs(proposal)
do
local voteCount = v["voteCount"]
if voteCount > mostVotes
then
mostVotes = voteCount
winnerIndex = i
end
end
return winnerIndex
end

-- 每次合约查询都调用
function L0Query(args)
local key = args[0]
if key == "chairperson" then
return L0.GetState("chairperson")
end
if key == "voters" then
local voterAddr = args[1]
local voters = L0.GetState("voters")
local res = voterAddr..","..voters[voterAddr]["voteTo"]
return res
end
if key == "winner" then
return winner()
end
if key == "proposal" then
return "proposal"
end
end

合约开发规范

合约开发luren5 发表了文章 • 0 个评论 • 242 次浏览 • 2017-07-24 14:41 • 来自相关话题

L0合约介绍
L0的智能合约目前支持两种,基于lua的和基于js的, 目前推荐前者。开发者可根据自身的业务逻辑编写合约代码,然后部署到L0上,部署成功后会返回合约的地址,之后即可调用合约相关的方法了。部署合约和调用合约方法都是一笔交易,它会被打包这笔交易的节点执行 ,进而按照合约预定的逻辑修改账本数据,区块被打包后进行全网广播,那么所有的节点都会存储相应的数据。
 
合约编码规范
以下是一个合约的模板,开发者需要引用L0模块,并实现模板里面的几个方法-- 用合约来完成 ***
local L0 = require("L0")

-- 合约创建时会被调用一次, 完成数据初始化
function L0Init(args)

return true
end

-- 每次合约执行都调用
function L0Invoke(func, args)

return true,"ok"
end

-- 每次合约查询都调用
function L0Query(args)合约方法调用
调用合约方法也是一笔交易,所以开发者需要构建一笔交易,通过RPC或者P2P将交易广播出去, 戳这里可以查看合约的部署及调用的完整示例,通过RPC的调用示例将会在后面的文章中给出说明。
查看全部
L0合约介绍
L0的智能合约目前支持两种,基于lua的和基于js的, 目前推荐前者。开发者可根据自身的业务逻辑编写合约代码,然后部署到L0上,部署成功后会返回合约的地址,之后即可调用合约相关的方法了。部署合约和调用合约方法都是一笔交易,它会被打包这笔交易的节点执行 ,进而按照合约预定的逻辑修改账本数据,区块被打包后进行全网广播,那么所有的节点都会存储相应的数据。
 
合约编码规范
以下是一个合约的模板,开发者需要引用L0模块,并实现模板里面的几个方法
-- 用合约来完成 ***
local L0 = require("L0")

-- 合约创建时会被调用一次, 完成数据初始化
function L0Init(args)

return true
end

-- 每次合约执行都调用
function L0Invoke(func, args)

return true,"ok"
end

-- 每次合约查询都调用
function L0Query(args)
合约方法调用
调用合约方法也是一笔交易,所以开发者需要构建一笔交易,通过RPC或者P2P将交易广播出去, 戳这里可以查看合约的部署及调用的完整示例,通过RPC的调用示例将会在后面的文章中给出说明。

Open-API

文档bochen 发表了文章 • 0 个评论 • 228 次浏览 • 2017-07-22 15:31 • 来自相关话题

 
Table of Contents
1. 创建账户[list][*]1.1. URL1.2. 支持格式1.3. HTTP请求方式1.4. 是否需要登录1.5. 访问授权限制1.6. 请求参数1.7. 返回结果
[/*]
[*]2. 列举账户
2.1. URL2.2. 支持格式2.3. HTTP请求方式2.4. 是否需要登录2.5. 访问授权限制2.6. 请求参数2.7. 返回结果
[/*]
[*]3. 无私钥签名
3.1. URL3.2. 支持格式3.3. HTTP请求方式3.4. 是否需要登录3.5. 访问授权限制3.6. 请求参数3.7. 返回结果
[/*]
[*]4. 创建交易
4.1. URL4.2. 支持格式4.3. HTTP请求方式4.4. 是否需要登录4.5. 访问授权限制4.6. 请求参数4.7. 返回结果
[/*]
[*]5. 广播交易
5.1. URL5.2. 支持格式5.3. HTTP请求方式5.4. 是否需要登录5.5. 访问授权限制5.6. 请求参数5.7. 返回结果
[/*]
[*]6. 获取本地节点信息
6.1. URL6.2. 支持格式6.3. HTTP请求方式6.4. 是否需要登录6.5. 请求参数6.6. 返回结果
[/*]
[*]7. 获取已连接节点信息
7.1. URL7.2. 支持格式7.3. HTTP请求方式7.4. 是否需要登录7.5. 请求参数7.6. 返回结果
[/*]
[*]8. 获取区块链高度
8.1. URL8.2. 支持格式8.3. HTTP请求方式8.4. 是否需要登录8.5. 请求参数8.6. 返回结果
[/*]
[*]9. 获取最新区块Hash
9.1. URL9.2. 支持格式9.3. HTTP请求方式9.4. 是否需要登录9.5. 请求参数9.6. 返回结果
[/*]
[*]10. 获取账户余额
10.1. URL10.2. 支持格式10.3. HTTP请求方式10.4. 是否需要登录10.5. 请求参数10.6. 返回结果
[/*]
[*]11. 根据区块高度获取区块
11.1. URL11.2. 支持格式11.3. HTTP请求方式11.4. 是否需要登录11.5. 请求参数11.6. 返回结果
[/*]
[*]12. 根据区块Hash获取区块
12.1. URL12.2. 支持格式12.3. HTTP请求方式12.4. 是否需要登录12.5. 请求参数12.6. 返回结果
[/*]
[*]13. 根据交易Hash获取交易
13.1. URL13.2. 支持格式13.3. HTTP请求方式13.4. 是否需要登录13.5. 请求参数13.6. 返回结果
[/*]
[*]14. 根据区块Hash和交易类型获得区块内所有交易
14.1. URL14.2. 支持格式14.3. HTTP请求方式14.4. 是否需要登录14.5. 请求参数14.6. 返回结果
[/*]
[*]15. 根据区块高度和交易类型获得区块内所有交易
15.1. URL15.2. 支持格式15.3. HTTP请求方式15.4. 是否需要登录15.5. 请求参数15.6. 返回结果
[/*]
[*]16. 根据汇总交易Hash和交易类型获得被汇总的跨链交易
16.1. URL16.2. 支持格式16.3. HTTP请求方式16.4. 是否需要登录16.5. 请求参数16.6. 返回结果
[/*]
[/list]
# 创建账户 ## URL - http://47.92.105.237/account/create ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 是 - 关于登录授权,参见 如何登录授权 ## 访问授权限制 - 访问级别:高级接口(需要授权) ## 请求参数 必选类型及范围说明accountTypetrueuint32 Passphrasetruestring  { “accountType”: 1, “passphrase”: “123456” } ## 返回结果 { “accountAddress”:”0x75ed2fad71240bc51d5c52763bf27bc7e5815028”, “errorCode”: null, “error”:null } # 列举账户 ## URL - http://47.92.105.237/account/list ## 支持格式 - JSON ## HTTP请求方式 - GET ## 是否需要登录 - 是 - 关于登录授权,参见 如何登录授权 ## 访问授权限制 - 访问级别:高级接口(需要授权) ## 请求参数 - 无 ## 返回结果 { accounts: [“0x3066333739303331306630336263333931363035”, “0x3639303662333131333963356133616664386564”, “0x3962623330643664383036636162643739346663”, “0x3163386335663736323761366462386365336437”, “0x6434323162343934353738636130633030353061”], “errorCode”: null, “error”:null } # 无私钥签名 ## URL - http://47.92.105.237/account/sign ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 是 - 关于登录授权,参见 如何登录授权 ## 访问授权限制 - 访问级别:高级接口(需要授权) ## 请求参数 必选类型及范围说明originTxtruestring交易的原始数据accounttruestring Passtruestring  { “originTx”: “040001030504000103020101143951c0b0975beb85801f79aa415f38c8bf7ef076030f4240016400fedd011f59”, “account”: “0x723056db1ba8497a1a00a79a252a51df34e029b6”, “passphrase”: “123456” } ## 返回结果 { “sign”:”040001030504000103020101143951c0b0975beb85801f79aa415f38c8bf7ef076030f424001644158994b076ff4160895c6b44957b40f8411f71e3daf2f982f01d5848a0d794bfd44c03419cb24ed4e4bf47a79b43c5878e0ea3ae67539cb3700a51b926928f4811cfedd011f59”, “errorCode”: null, “error”: null } # 创建交易 ## URL - http://47.92.105.237/tx/create ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 是 - 关于登录授权,参见 如何登录授权 ## 访问授权限制 - 访问级别:高级接口(需要授权) ## 请求参数 必选类型及范围说明fromChaintruestring交易起始链坐标toChaintruestring交易目标链坐标recipienttruestring交易接收方地址amounttrueint交易金额feetrueint交易手续费txTypetrueint交易类型 { “fromChain”: “0,1,3,5”, “toChain”: “0,1,3,2”, “recipient”: “0x27c649b7c4f66cfaedb99d6b38527db4deda6f41”, “amount”: 1000000, “fee”: 100, “txType”: 1 } ## 返回结果 { “originTx”:”040001030504000103020101143951c0b0975beb85801f79aa415f38c8bf7ef076030f424001644158994b076ff4160895c6b44957b40f8411f71e3daf2f982f01d5848a0d794bfd44c03419cb24ed4e4bf47a79b43c5878e0ea3ae67539cb3700a51b926928f4811cfedd011f59”, “errorCode”: null, “error”: null } # 广播交易 ## URL - http://47.92.105.237/tx/broadcast ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 是 - 关于登录授权,参见 如何登录授权 ## 访问授权限制 - 访问级别:高级接口(需要授权) ## 请求参数 必选类型及范围说明originTxtruestring交易的原始数据 { “originTx”: “040001030504000103020101143951c0b0975beb85801f79aa415f38c8bf7ef076030f4240016400fedd011f59”, } ## 返回结果 { “hash”:”27b9a7f2c0b4e409c408f0616b0c00b5d8e684fef85fd52fbd1ab5fe981b8165”, “errorCode”: null, “error”: null } # 获取本地节点信息 ## URL - http://47.92.105.237/network/get-local-peer ## 支持格式 - JSON ## HTTP请求方式 - GET ## 是否需要登录 - 否 ## 请求参数 - 无 ## 返回结果 { “peer”: [“encode://0459db9f954749751ec6cc0d6e05f4dc33c4ccbb150b1f80270e39371140d772dbbb3910bba7003b874031a468a1de697228af357b4a93420e54e21f03f3c87a67@127.0.0.1:20166”], “errorCode”: null, “error”: null } # 获取已连接节点信息 ## URL - http://47.92.105.237/network/get-peers ## 支持格式 - JSON ## HTTP请求方式 - GET ## 是否需要登录 - 否 ## 请求参数 - 无 ## 返回结果 { “peer”: [“encode://0459db9f954749751ec6cc0d6e05f4dc33c4ccbb150b1f80270e39371140d772dbbb3910bba7003b874031a468a1de697228af357b4a93420e54e21f03f3c87a67@127.0.0.1:20166”, “encode://040281045debdc2696e24ba83f3b75cd6aad7bf805aef24b698b346fba3f07b0fb8eb67f65c2e96ca7164deb6f86205ee3dda8a2b59a21ba501debcc2b9c560102@127.0.0.1:20167”, “encode://042868e80dc4adae0174790bdfffa92d07d4a69548b845a5f50a5abb8925c18483cc6de0093df7b83df7d41eddac25f2f201a823826b77486fd3d2116753f11e2c@127.0.0.1:20169”, “encode://0459db9f954749751ec6cc0d6e05f4dc33c4ccbb150b1f80270e39371140d772dbbb3910bba7003b874031a468a1de697228af357b4a93420e54e21f03f3c87a67@127.0.0.1:20166” ], “errorCode”: null, “error”: null } # 获取区块链高度 ## URL - http://47.92.105.237/ledger/height ## 支持格式 - JSON ## HTTP请求方式 - GET ## 是否需要登录 - 否 ## 请求参数 - 无 ## 返回结果 { “height”: 18, “errorCode”: null, “error”: null } # 获取最新区块Hash ## URL - http://47.92.105.237/ledger/get-last-block-hash ## 支持格式 - JSON ## HTTP请求方式 - GET ## 是否需要登录 - 否 ## 请求参数 - 无 ## 返回结果 { “hash”: “27b9a7f2c0b4e409c408f0616b0c00b5d8e684fef85fd52fbd1ab5fe981b8165”, “errorCode”: null, “error”: null } # 获取账户余额 ## URL - http://47.92.105.237/ledger/get-balance ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 是 ## 请求参数 必选类型及范围说明accounttruestring  { “account”: “0x723056db1ba8497a1a00a79a252a51df34e029b6”, } ## 返回结果 { “Amount”: 0, “Nonce”: 0, “errorCode”: null, “error”: null } # 根据区块高度获取区块 ## URL - http://47.92.105.237/ledger/get-block-by-number ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 否 ## 请求参数 必选类型及范围说明heighttrueuint32  { “height”: 18 } ## 返回结果 { “header”: { “previousHash”: “19c82345da46f59b84fcf25505a2039bccc4863a00c2834c2fcdb76a9ec72625”, “timeStamp”: 1495464441, “nonce”: 2596996162, “atomticMerkleHash”: “bfe7c6e05736e5283e5a1cf11ca48cdeaaceef66e820698710ae031d1265d358”, “mergedMerkleHash”: “b92910332136519834b65e18dd897230f92d3a91f3fe1d08c6c095e5ef76dc2e”, “height”: 1 }, “atmoicTxs”: [ { “data”: { “fromChain”: “00”, “toChain”: “00”, “type”: 0, “nonce”: 4039455774, “recipient”: “27c649b7c4f66cfaedb99d6b38527db4deda6f41”, “amount”: 521000, “fee”: 200, “signature”: “22e122f2b8e6849ec8dd5b32553946d0a8fc7252f948d23332048abe951637414db2d04442d97e9d8583ebee3be1edbd198336bb02b719563b8b79a1ddcfb0441b”, “createTime”: 1495464441 }, “payload”: null } ], “mergedTxs”: [ { “data”: { “fromChain”: “01”, “toChain”: “02”, “type”: 1, “nonce”: 2854263694, “recipient”: “a132277be213f56221b6140998c03d860a60e1f8”, “amount”: 1024, “fee”: 200, “signature”: null, “createTime”: 1495464441 }, “payload”: null } ] }, “errorCode”: null, “error”: null } # 根据区块Hash获取区块 ## URL - http://47.92.105.237/ledger/get-block-by-hash ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 否 ## 请求参数 必选类型及范围说明hashtruestring  { “hash”: “88f720274a42707bc8a198cc165bdefc8451d743a7144b0dba8178bc54d962dd” } ## 返回结果 { “header”: { “previousHash”: “19c82345da46f59b84fcf25505a2039bccc4863a00c2834c2fcdb76a9ec72625”, “timeStamp”: 1495464441, “nonce”: 2596996162, “atomticMerkleHash”: “bfe7c6e05736e5283e5a1cf11ca48cdeaaceef66e820698710ae031d1265d358”, “mergedMerkleHash”: “b92910332136519834b65e18dd897230f92d3a91f3fe1d08c6c095e5ef76dc2e”, “height”: 1 }, “atmoicTxs”: [ { “data”: { “fromChain”: “00”, “toChain”: “00”, “type”: 0, “nonce”: 4039455774, “recipient”: “27c649b7c4f66cfaedb99d6b38527db4deda6f41”, “amount”: 521000, “fee”: 200, “signature”: “22e122f2b8e6849ec8dd5b32553946d0a8fc7252f948d23332048abe951637414db2d04442d97e9d8583ebee3be1edbd198336bb02b719563b8b79a1ddcfb0441b”, “createTime”: 1495464441 }, “payload”: null } ], “mergedTxs”: [ { “data”: { “fromChain”: “01”, “toChain”: “02”, “type”: 1, “nonce”: 2854263694, “recipient”: “a132277be213f56221b6140998c03d860a60e1f8”, “amount”: 1024, “fee”: 200, “signature”: null, “createTime”: 1495464441 }, “payload”: null } ] }, “errorCode”: null, “error”: null } # 根据交易Hash获取交易 ## URL - http://47.92.105.237/ledger/get-tx-by-hash ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 否 ## 请求参数 必选类型及范围说明txHashtruestring  { “txHash”: “88f720274a42707bc8a198cc165bdefc8451d743a7144b0dba8178bc54d962dd” } ## 返回结果 { “data”: { “fromChain”: “00”, “toChain”: “00”, “type”: 0, “nonce”: 4039455774, “recipient”: “27c649b7c4f66cfaedb99d6b38527db4deda6f41”, “amount”: 521000, “fee”: 200, “signature”: “3ce3a7ce92a27bc2450523c74a120fb9ee903a23acb4717392613155c3c6586759c150e93169517775da3b7238561819c07a522489ccc86e206c28c636f298181c”, “createTime”: 1495466565 }, “payload”: null }, “errorCode”: null, “error”: null } # 根据区块Hash和交易类型获得区块内所有交易 ## URL - http://47.92.105.237/ledger/get-txs-by-block-hash ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 否 ## 请求参数 必选类型及范围说明blockHashtruestring txTypetrueuint32  { “blockHash”: “88f720274a42707bc8a198cc165bdefc8451d743a7144b0dba8178bc54d962dd”, “txType”: 1 } ## 返回结果 { “data”: { “fromChain”: “00”, “toChain”: “00”, “type”: 0, “nonce”: 4039455774, “recipient”: “27c649b7c4f66cfaedb99d6b38527db4deda6f41”, “amount”: 521000, “fee”: 200, “signature”: “3ce3a7ce92a27bc2450523c74a120fb9ee903a23acb4717392613155c3c6586759c150e93169517775da3b7238561819c07a522489ccc86e206c28c636f298181c”, “createTime”: 1495466565 }, “payload”: null }, “errorCode”: null, “error”: null } # 根据区块高度和交易类型获得区块内所有交易 ## URL - http://47.92.105.237/ledger/get-txs-by-block-number ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 否 ## 请求参数 必选类型及范围说明blockNumbertruestring txTypetrueuint32  { “blockNumber”: 18, “txType”: 1 } ## 返回结果 {[ { “data”: { “fromChain”: “01”, “toChain”: “02”, “type”: 1, “nonce”: 2854263694, “recipient”: “a132277be213f56221b6140998c03d860a60e1f8”, “amount”: 1024, “fee”: 200, “signature”: null, “createTime”: 1495466565 }, “payload”: null }, { “data”: { “fromChain”: “01”, “toChain”: “02”, “type”: 1, “nonce”: 2854263694, “recipient”: “a132277be213f56221b6140998c03d860a60e1f8”, “amount”: 1024, “fee”: 200, “signature”: null, “createTime”: 1495466565 }, “payload”: null } ], “errorCode”: null, “error”: null } # 根据汇总交易Hash和交易类型获得被汇总的跨链交易 ## URL - http://47.92.105.237/ledger/get-txs-by-merge-hash ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 否 ## 请求参数 必选类型及范围说明txHashtruestring  { “txHash”:”4684e07a0453c3848c97e2c5a6d6e0ee9a8c97f9a21ec1da6b14929e34234e62”, } ## 返回结果 {[ { “data”: { “fromChain”: “01”, “toChain”: “02”, “type”: 1, “nonce”: 2854263694, “recipient”: “a132277be213f56221b6140998c03d860a60e1f8”, “amount”: 1024, “fee”: 200, “signature”: null, “createTime”: 1495466565 }, “payload”: null }, { “data”: { “fromChain”: “01”, “toChain”: “02”, “type”: 1, “nonce”: 2854263694, “recipient”: “a132277be213f56221b6140998c03d860a60e1f8”, “amount”: 1024, “fee”: 200, “signature”: null, “createTime”: 1495466565 }, “payload”: null } ], “errorCode”: null, “error”: null } ​
 
查看全部
 
Table of Contents
  • 1. 创建账户[list][*]1.1. URL
  • 1.2. 支持格式
  • 1.3. HTTP请求方式
  • 1.4. 是否需要登录
  • 1.5. 访问授权限制
  • 1.6. 请求参数
  • 1.7. 返回结果

[/*]
[*]2. 列举账户
  • 2.1. URL
  • 2.2. 支持格式
  • 2.3. HTTP请求方式
  • 2.4. 是否需要登录
  • 2.5. 访问授权限制
  • 2.6. 请求参数
  • 2.7. 返回结果

[/*]
[*]3. 无私钥签名
  • 3.1. URL
  • 3.2. 支持格式
  • 3.3. HTTP请求方式
  • 3.4. 是否需要登录
  • 3.5. 访问授权限制
  • 3.6. 请求参数
  • 3.7. 返回结果

[/*]
[*]4. 创建交易
  • 4.1. URL
  • 4.2. 支持格式
  • 4.3. HTTP请求方式
  • 4.4. 是否需要登录
  • 4.5. 访问授权限制
  • 4.6. 请求参数
  • 4.7. 返回结果

[/*]
[*]5. 广播交易
  • 5.1. URL
  • 5.2. 支持格式
  • 5.3. HTTP请求方式
  • 5.4. 是否需要登录
  • 5.5. 访问授权限制
  • 5.6. 请求参数
  • 5.7. 返回结果

[/*]
[*]6. 获取本地节点信息
  • 6.1. URL
  • 6.2. 支持格式
  • 6.3. HTTP请求方式
  • 6.4. 是否需要登录
  • 6.5. 请求参数
  • 6.6. 返回结果

[/*]
[*]7. 获取已连接节点信息
  • 7.1. URL
  • 7.2. 支持格式
  • 7.3. HTTP请求方式
  • 7.4. 是否需要登录
  • 7.5. 请求参数
  • 7.6. 返回结果

[/*]
[*]8. 获取区块链高度
  • 8.1. URL
  • 8.2. 支持格式
  • 8.3. HTTP请求方式
  • 8.4. 是否需要登录
  • 8.5. 请求参数
  • 8.6. 返回结果

[/*]
[*]9. 获取最新区块Hash
  • 9.1. URL
  • 9.2. 支持格式
  • 9.3. HTTP请求方式
  • 9.4. 是否需要登录
  • 9.5. 请求参数
  • 9.6. 返回结果

[/*]
[*]10. 获取账户余额
  • 10.1. URL
  • 10.2. 支持格式
  • 10.3. HTTP请求方式
  • 10.4. 是否需要登录
  • 10.5. 请求参数
  • 10.6. 返回结果

[/*]
[*]11. 根据区块高度获取区块
  • 11.1. URL
  • 11.2. 支持格式
  • 11.3. HTTP请求方式
  • 11.4. 是否需要登录
  • 11.5. 请求参数
  • 11.6. 返回结果

[/*]
[*]12. 根据区块Hash获取区块
  • 12.1. URL
  • 12.2. 支持格式
  • 12.3. HTTP请求方式
  • 12.4. 是否需要登录
  • 12.5. 请求参数
  • 12.6. 返回结果

[/*]
[*]13. 根据交易Hash获取交易
  • 13.1. URL
  • 13.2. 支持格式
  • 13.3. HTTP请求方式
  • 13.4. 是否需要登录
  • 13.5. 请求参数
  • 13.6. 返回结果

[/*]
[*]14. 根据区块Hash和交易类型获得区块内所有交易
  • 14.1. URL
  • 14.2. 支持格式
  • 14.3. HTTP请求方式
  • 14.4. 是否需要登录
  • 14.5. 请求参数
  • 14.6. 返回结果

[/*]
[*]15. 根据区块高度和交易类型获得区块内所有交易
  • 15.1. URL
  • 15.2. 支持格式
  • 15.3. HTTP请求方式
  • 15.4. 是否需要登录
  • 15.5. 请求参数
  • 15.6. 返回结果

[/*]
[*]16. 根据汇总交易Hash和交易类型获得被汇总的跨链交易
  • 16.1. URL
  • 16.2. 支持格式
  • 16.3. HTTP请求方式
  • 16.4. 是否需要登录
  • 16.5. 请求参数
  • 16.6. 返回结果

[/*]
[/list]
# 创建账户 ## URL - http://47.92.105.237/account/create ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 是 - 关于登录授权,参见 如何登录授权 ## 访问授权限制 - 访问级别:高级接口(需要授权) ## 请求参数 必选类型及范围说明accountTypetrueuint32 Passphrasetruestring  { “accountType”: 1, “passphrase”: “123456” } ## 返回结果 { “accountAddress”:”0x75ed2fad71240bc51d5c52763bf27bc7e5815028”, “errorCode”: null, “error”:null } # 列举账户 ## URL - http://47.92.105.237/account/list ## 支持格式 - JSON ## HTTP请求方式 - GET ## 是否需要登录 - 是 - 关于登录授权,参见 如何登录授权 ## 访问授权限制 - 访问级别:高级接口(需要授权) ## 请求参数 - 无 ## 返回结果 { accounts: [“0x3066333739303331306630336263333931363035”, “0x3639303662333131333963356133616664386564”, “0x3962623330643664383036636162643739346663”, “0x3163386335663736323761366462386365336437”, “0x6434323162343934353738636130633030353061”], “errorCode”: null, “error”:null } # 无私钥签名 ## URL - http://47.92.105.237/account/sign ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 是 - 关于登录授权,参见 如何登录授权 ## 访问授权限制 - 访问级别:高级接口(需要授权) ## 请求参数 必选类型及范围说明originTxtruestring交易的原始数据accounttruestring Passtruestring  { “originTx”: “040001030504000103020101143951c0b0975beb85801f79aa415f38c8bf7ef076030f4240016400fedd011f59”, “account”: “0x723056db1ba8497a1a00a79a252a51df34e029b6”, “passphrase”: “123456” } ## 返回结果 { “sign”:”040001030504000103020101143951c0b0975beb85801f79aa415f38c8bf7ef076030f424001644158994b076ff4160895c6b44957b40f8411f71e3daf2f982f01d5848a0d794bfd44c03419cb24ed4e4bf47a79b43c5878e0ea3ae67539cb3700a51b926928f4811cfedd011f59”, “errorCode”: null, “error”: null } # 创建交易 ## URL - http://47.92.105.237/tx/create ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 是 - 关于登录授权,参见 如何登录授权 ## 访问授权限制 - 访问级别:高级接口(需要授权) ## 请求参数 必选类型及范围说明fromChaintruestring交易起始链坐标toChaintruestring交易目标链坐标recipienttruestring交易接收方地址amounttrueint交易金额feetrueint交易手续费txTypetrueint交易类型 { “fromChain”: “0,1,3,5”, “toChain”: “0,1,3,2”, “recipient”: “0x27c649b7c4f66cfaedb99d6b38527db4deda6f41”, “amount”: 1000000, “fee”: 100, “txType”: 1 } ## 返回结果 { “originTx”:”040001030504000103020101143951c0b0975beb85801f79aa415f38c8bf7ef076030f424001644158994b076ff4160895c6b44957b40f8411f71e3daf2f982f01d5848a0d794bfd44c03419cb24ed4e4bf47a79b43c5878e0ea3ae67539cb3700a51b926928f4811cfedd011f59”, “errorCode”: null, “error”: null } # 广播交易 ## URL - http://47.92.105.237/tx/broadcast ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 是 - 关于登录授权,参见 如何登录授权 ## 访问授权限制 - 访问级别:高级接口(需要授权) ## 请求参数 必选类型及范围说明originTxtruestring交易的原始数据 { “originTx”: “040001030504000103020101143951c0b0975beb85801f79aa415f38c8bf7ef076030f4240016400fedd011f59”, } ## 返回结果 { “hash”:”27b9a7f2c0b4e409c408f0616b0c00b5d8e684fef85fd52fbd1ab5fe981b8165”, “errorCode”: null, “error”: null } # 获取本地节点信息 ## URL - http://47.92.105.237/network/get-local-peer ## 支持格式 - JSON ## HTTP请求方式 - GET ## 是否需要登录 - 否 ## 请求参数 - 无 ## 返回结果 { “peer”: [“encode://0459db9f954749751ec6cc0d6e05f4dc33c4ccbb150b1f80270e39371140d772dbbb3910bba7003b874031a468a1de697228af357b4a93420e54e21f03f3c87a67@127.0.0.1:20166”], “errorCode”: null, “error”: null } # 获取已连接节点信息 ## URL - http://47.92.105.237/network/get-peers ## 支持格式 - JSON ## HTTP请求方式 - GET ## 是否需要登录 - 否 ## 请求参数 - 无 ## 返回结果 { “peer”: [“encode://0459db9f954749751ec6cc0d6e05f4dc33c4ccbb150b1f80270e39371140d772dbbb3910bba7003b874031a468a1de697228af357b4a93420e54e21f03f3c87a67@127.0.0.1:20166”, “encode://040281045debdc2696e24ba83f3b75cd6aad7bf805aef24b698b346fba3f07b0fb8eb67f65c2e96ca7164deb6f86205ee3dda8a2b59a21ba501debcc2b9c560102@127.0.0.1:20167”, “encode://042868e80dc4adae0174790bdfffa92d07d4a69548b845a5f50a5abb8925c18483cc6de0093df7b83df7d41eddac25f2f201a823826b77486fd3d2116753f11e2c@127.0.0.1:20169”, “encode://0459db9f954749751ec6cc0d6e05f4dc33c4ccbb150b1f80270e39371140d772dbbb3910bba7003b874031a468a1de697228af357b4a93420e54e21f03f3c87a67@127.0.0.1:20166” ], “errorCode”: null, “error”: null } # 获取区块链高度 ## URL - http://47.92.105.237/ledger/height ## 支持格式 - JSON ## HTTP请求方式 - GET ## 是否需要登录 - 否 ## 请求参数 - 无 ## 返回结果 { “height”: 18, “errorCode”: null, “error”: null } # 获取最新区块Hash ## URL - http://47.92.105.237/ledger/get-last-block-hash ## 支持格式 - JSON ## HTTP请求方式 - GET ## 是否需要登录 - 否 ## 请求参数 - 无 ## 返回结果 { “hash”: “27b9a7f2c0b4e409c408f0616b0c00b5d8e684fef85fd52fbd1ab5fe981b8165”, “errorCode”: null, “error”: null } # 获取账户余额 ## URL - http://47.92.105.237/ledger/get-balance ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 是 ## 请求参数 必选类型及范围说明accounttruestring  { “account”: “0x723056db1ba8497a1a00a79a252a51df34e029b6”, } ## 返回结果 { “Amount”: 0, “Nonce”: 0, “errorCode”: null, “error”: null } # 根据区块高度获取区块 ## URL - http://47.92.105.237/ledger/get-block-by-number ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 否 ## 请求参数 必选类型及范围说明heighttrueuint32  { “height”: 18 } ## 返回结果 { “header”: { “previousHash”: “19c82345da46f59b84fcf25505a2039bccc4863a00c2834c2fcdb76a9ec72625”, “timeStamp”: 1495464441, “nonce”: 2596996162, “atomticMerkleHash”: “bfe7c6e05736e5283e5a1cf11ca48cdeaaceef66e820698710ae031d1265d358”, “mergedMerkleHash”: “b92910332136519834b65e18dd897230f92d3a91f3fe1d08c6c095e5ef76dc2e”, “height”: 1 }, “atmoicTxs”: [ { “data”: { “fromChain”: “00”, “toChain”: “00”, “type”: 0, “nonce”: 4039455774, “recipient”: “27c649b7c4f66cfaedb99d6b38527db4deda6f41”, “amount”: 521000, “fee”: 200, “signature”: “22e122f2b8e6849ec8dd5b32553946d0a8fc7252f948d23332048abe951637414db2d04442d97e9d8583ebee3be1edbd198336bb02b719563b8b79a1ddcfb0441b”, “createTime”: 1495464441 }, “payload”: null } ], “mergedTxs”: [ { “data”: { “fromChain”: “01”, “toChain”: “02”, “type”: 1, “nonce”: 2854263694, “recipient”: “a132277be213f56221b6140998c03d860a60e1f8”, “amount”: 1024, “fee”: 200, “signature”: null, “createTime”: 1495464441 }, “payload”: null } ] }, “errorCode”: null, “error”: null } # 根据区块Hash获取区块 ## URL - http://47.92.105.237/ledger/get-block-by-hash ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 否 ## 请求参数 必选类型及范围说明hashtruestring  { “hash”: “88f720274a42707bc8a198cc165bdefc8451d743a7144b0dba8178bc54d962dd” } ## 返回结果 { “header”: { “previousHash”: “19c82345da46f59b84fcf25505a2039bccc4863a00c2834c2fcdb76a9ec72625”, “timeStamp”: 1495464441, “nonce”: 2596996162, “atomticMerkleHash”: “bfe7c6e05736e5283e5a1cf11ca48cdeaaceef66e820698710ae031d1265d358”, “mergedMerkleHash”: “b92910332136519834b65e18dd897230f92d3a91f3fe1d08c6c095e5ef76dc2e”, “height”: 1 }, “atmoicTxs”: [ { “data”: { “fromChain”: “00”, “toChain”: “00”, “type”: 0, “nonce”: 4039455774, “recipient”: “27c649b7c4f66cfaedb99d6b38527db4deda6f41”, “amount”: 521000, “fee”: 200, “signature”: “22e122f2b8e6849ec8dd5b32553946d0a8fc7252f948d23332048abe951637414db2d04442d97e9d8583ebee3be1edbd198336bb02b719563b8b79a1ddcfb0441b”, “createTime”: 1495464441 }, “payload”: null } ], “mergedTxs”: [ { “data”: { “fromChain”: “01”, “toChain”: “02”, “type”: 1, “nonce”: 2854263694, “recipient”: “a132277be213f56221b6140998c03d860a60e1f8”, “amount”: 1024, “fee”: 200, “signature”: null, “createTime”: 1495464441 }, “payload”: null } ] }, “errorCode”: null, “error”: null } # 根据交易Hash获取交易 ## URL - http://47.92.105.237/ledger/get-tx-by-hash ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 否 ## 请求参数 必选类型及范围说明txHashtruestring  { “txHash”: “88f720274a42707bc8a198cc165bdefc8451d743a7144b0dba8178bc54d962dd” } ## 返回结果 { “data”: { “fromChain”: “00”, “toChain”: “00”, “type”: 0, “nonce”: 4039455774, “recipient”: “27c649b7c4f66cfaedb99d6b38527db4deda6f41”, “amount”: 521000, “fee”: 200, “signature”: “3ce3a7ce92a27bc2450523c74a120fb9ee903a23acb4717392613155c3c6586759c150e93169517775da3b7238561819c07a522489ccc86e206c28c636f298181c”, “createTime”: 1495466565 }, “payload”: null }, “errorCode”: null, “error”: null } # 根据区块Hash和交易类型获得区块内所有交易 ## URL - http://47.92.105.237/ledger/get-txs-by-block-hash ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 否 ## 请求参数 必选类型及范围说明blockHashtruestring txTypetrueuint32  { “blockHash”: “88f720274a42707bc8a198cc165bdefc8451d743a7144b0dba8178bc54d962dd”, “txType”: 1 } ## 返回结果 { “data”: { “fromChain”: “00”, “toChain”: “00”, “type”: 0, “nonce”: 4039455774, “recipient”: “27c649b7c4f66cfaedb99d6b38527db4deda6f41”, “amount”: 521000, “fee”: 200, “signature”: “3ce3a7ce92a27bc2450523c74a120fb9ee903a23acb4717392613155c3c6586759c150e93169517775da3b7238561819c07a522489ccc86e206c28c636f298181c”, “createTime”: 1495466565 }, “payload”: null }, “errorCode”: null, “error”: null } # 根据区块高度和交易类型获得区块内所有交易 ## URL - http://47.92.105.237/ledger/get-txs-by-block-number ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 否 ## 请求参数 必选类型及范围说明blockNumbertruestring txTypetrueuint32  { “blockNumber”: 18, “txType”: 1 } ## 返回结果 {[ { “data”: { “fromChain”: “01”, “toChain”: “02”, “type”: 1, “nonce”: 2854263694, “recipient”: “a132277be213f56221b6140998c03d860a60e1f8”, “amount”: 1024, “fee”: 200, “signature”: null, “createTime”: 1495466565 }, “payload”: null }, { “data”: { “fromChain”: “01”, “toChain”: “02”, “type”: 1, “nonce”: 2854263694, “recipient”: “a132277be213f56221b6140998c03d860a60e1f8”, “amount”: 1024, “fee”: 200, “signature”: null, “createTime”: 1495466565 }, “payload”: null } ], “errorCode”: null, “error”: null } # 根据汇总交易Hash和交易类型获得被汇总的跨链交易 ## URL - http://47.92.105.237/ledger/get-txs-by-merge-hash ## 支持格式 - JSON ## HTTP请求方式 - POST ## 是否需要登录 - 否 ## 请求参数 必选类型及范围说明txHashtruestring  { “txHash”:”4684e07a0453c3848c97e2c5a6d6e0ee9a8c97f9a21ec1da6b14929e34234e62”, } ## 返回结果 {[ { “data”: { “fromChain”: “01”, “toChain”: “02”, “type”: 1, “nonce”: 2854263694, “recipient”: “a132277be213f56221b6140998c03d860a60e1f8”, “amount”: 1024, “fee”: 200, “signature”: null, “createTime”: 1495466565 }, “payload”: null }, { “data”: { “fromChain”: “01”, “toChain”: “02”, “type”: 1, “nonce”: 2854263694, “recipient”: “a132277be213f56221b6140998c03d860a60e1f8”, “amount”: 1024, “fee”: 200, “signature”: null, “createTime”: 1495466565 }, “payload”: null } ], “errorCode”: null, “error”: null } ​