精华内容
下载资源
问答
  • 交易所充提币
    千次阅读
    2021-06-30 16:06:29

    这里其实为什么说要用到JAVA来做呢! 很多程序员都是想用PHP直接开发,但是目前官方给出的文档中,并没有PHP版本,JAVA是最合适的选择,并且可以用JAVA来做后端服务API,后期的话,也可以用任何语言来对接这套API,减少了后面大大的工作量。 USDT钱包对接 ETH自动充提接口ERC20代币自动充提提币接口开发 所有币种接口均提供API接口文档。 注意:底层为JAVA开发,JAVA写好了API接口,前端开发语言任意。
    之所有开发自己的钱包系统,是因为所有交易所的钱包,包括钱包服务商都是中心化管理钱包。 想开发一个自己的离线钱包服务器。 
    以下是我个人总结的一些开发资料 RC20的USDT,就是以太坊的代币。转账手续费低,速度快。 
    1、ERC20地址收到USDT后,USDT转账时需要扣ETH作为手续费。ERC20地址收到USDT后是没有ETH的。那么就需要充值ETH。 
    2、写好代码创建一个ETH地址,往里面冲入一定数量ETH作为手续费资金池。 这个可以在线接口处创建地址 或者自己调用接口创建地址。 
    3、等这个地址有了ETH,就可以调用ETH的转账接口,往收到USDT_ERC20的地址里面充值0.0035ETH以上作为手续费 。 
    因为USDT_ERC20转账是扣的当前这个转出地址里面的eth作为手续费。 
    4、总结:USDT_ERC20这个当前地址里面有usdt,也要有 0.0035以上的eth手续费。那么才可以调用转账接口,开始转账。 
    USDT_ERC20转账流程: 
    第一步:首先通过获取地址余额接口(name=usdt_erc20),查询USDT余额包括ETH手续费余额。 
    第二步:检测ETH手续费是否大于0.0035ETH,大于则即可调用接口转出USDT ,转账完毕。ETH以太坊网络gas limit和gas price设置 
    第三步:ETH手续费不足则 调用之前准备的ETH手续费资金池地址,往这个地址里面转入至少0.0035的ETH。完毕。等下次执行转账时即可转账成功。 
    下面来说下开发基本流程: 开发所需要的接口我们知道了 那么讲一下主要怎么开发,从何下手。最简单的方式就是利用web3.js来开发 web3.js 库是一系列模块的集合,服务于以太坊生态系统的各个功能,如: web3-eth 用来与以太坊区块链及合约的交互; web3-shh Whisper 协议相关,进行p2p通信和广播; web3-bzz swarm 协议(去中心化文件存储)相关; web3-utils 包含一些对 DApp 开发者有用的方法。 首先,需要将 web3.js 引入到项目中。 可以使用以下方法来完成: npm: npm install web3 meteor: meteor add ethereum:web3 pure js: link the dist/web3.min.js 然后你需要创建一个 web3 的实例,设置一个 provider。 支持以太坊的浏览器如 Mist 或 MetaMask 会有提供一个 ethereumProvider 或 web3.currentProvider 。 对于 web3.js 来说,可以检查 Web3.givenProvider ,如果属性为 null 再连接本地或远程的节点。 // in node.js use: var Web3 = require(‘web3’); var web3 = new Web3(Web3.givenProvider || “ws://localhost:8545”); 好了,可以开始使用 web3 了。 
    web3.eth web3-eth 包用来与以太坊区块链和以太坊智能合约进行交互。 var Eth = require(‘web3-eth’); // “Eth.providers.givenProvider” 在支持以太坊的浏览器上会被设置 var eth = new Eth(Eth.givenProvider || ‘ws://some.local-or-remote.node:8546’); // 或者使用 web3 旗下的包 var Web3 = require(‘web3’); var web3 = new Web3(Web3.givenProvider || ‘ws://some.local-or-remote.node:8546’); // -> web3.eth Note on checksum addresses 本包中函数所返回的以太坊地址均为校验和地址。 这意味着地址中有些字母是大写的而有些是小些的。 基于此可以计算地址的校验和并以此证明它的正确性。 校验和不正确的地址在传入函数时会抛错。 你可以使用全大写或全小写的地址来绕过校验和检查。 代码示例 web3.eth.getAccounts(console.log);
    [“0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe” ,“0x85F43D8a49eeB85d32Cf465507DD71d507100C1d”]

    更多相关内容
  • SEER交易所及第三方平台充提网关接入指南 本指南主要目的是帮助交易所和其它第三方平台(包括但不限于非SEER DAPPs应用、中心化应用等)搭建充提网关接入SEER主网,上线SEER主资产及基于SEER区块链发行的token,例如...

    SEER交易所及第三方平台充提网关接入指南

    本指南主要目的是帮助交易所和其它第三方平台(包括但不限于非SEER DAPPs应用、中心化应用等)搭建充提网关接入SEER主网,上线SEER主资产及基于SEER区块链发行的token,例如PFC、OPC等。

    使用SEER主网进行充提等操作,手续费远远低于SEER的ERC-20token和BTS资产,且不受以太坊拥堵等事件的影响。

    基本原理

    大部分交易所及第三方平台使用的网关(充值提现)是一个中心化的应用服务。

    以交易所充提为例,交易所为每位用户提供有一个平台id,任何用户向交易所的SEER主网账户转账,并在MEMO中填写该id,当交易所的SEER主网账户收到一笔转账时,可以根据MEMO中填写的信息确定是来自哪位用户的充值,从而在交易所平台内为用户上账。

    举例:

    1、小明从自己的SEER主网账户xiaoming充值1000SEER到交易所账户seerdex,MEMO中填写10010,交易所检测到主网账户seerdex收到一笔1000SEER的转账,MEMO为10010,则在小明的交易所账户10010中上账1000SEER

    2、小明请朋友小花帮自己充值,小花从自己的SEER主网账户xiaohua充值1000SEER到交易所账户seerdex,MEMO中填写10010,交易所检测到主网账户seerdex收到一笔1000SEER的转账,MEMO为10010,则在小明的交易所账户10010中上账1000SEER

    3、小明将自己玩大富翁游戏中赢得的SEER充值交易所,小明在大富翁游戏的提现页面中填写提现1000SEER到交易所账户seerdex,并填写MEMO10010,大富翁游戏在平台内扣除小明账户余额1000SEER,同时通过大富翁的SEER主网账户dafuweng向交易所账户seerdex转账1000SEER,MEMO为10010,交易所检测到主网账户seerdex收到一笔1000SEER的转账,MEMO为10010,则在小明的交易所账户10010中上账1000SEER

    例子3中,我们举例了用户从第三方平台提现到交易所的流程,从交易所提现到另一家交易所也是如此,这就需要交易所及第三方平台在设计提现功能时提供MEMO功能。为了资金安全,您可以部署两个或多个账号,其中一个账号负责用户充值,其它账号负责提现。

    准备工作

    运行环境

    推荐服务器配置为:2vCPUs 4G内存 20G以上硬盘,Ubuntu 16.04.4 x64 系统。

    获得账号及私钥

    注册账号

    您可以通过SEER网页钱包 https://wallet.seer.best 注册账号,其中账号中带有横杠或数字的账号为普通账号名,可以直接免费注册(点击了解方法) ,例如seer-exchangeseerdex01 ,而由纯英文字母构成的账号名为高级用户名,例如seerdex,则需通过一个终身会员账户缴纳注册手续费来注册。

    获得私钥

    在充提网关等功能中,我们需要账户的至少两对密钥,即当前资金密钥(Active key)和当前备注密钥(memo key),资金密钥让您拥有资金的转账及其他链上操作权限,备注密钥让您能生成和读取和该账号相关的MEMO信息。点击这里了解获取私钥的方法

    配置一个SEER全节点

    1、在服务器新建一个名叫seer的窗口;

    screen -S seer
    

    2、在root目录下新建一个名叫seer的目录,下载v0.0.5版本的程序包到此目录,并更名为seer.tar.gz。(请到SEER软件发布页https://github.com/seer-project/seer-core-package/releases 复制最新的ubuntu版本程序包链接替换掉此下载链接。)

    mkdir seer
    curl -Lo seer/seer.tar.gz https://github.com/seer-project/seer-core-package/releases/download/v0.05/seer-ubuntu-0.0.5.tar.gz 
    

    3、进入seer目录,解压此软件包。

    cd seer
    tar xzvf seer.tar.gz
    

    4、带websocket参数启动witness_node:

    witness_node --rpc-endpoint=127.0.0.1:9090 partial-operations=true --track-account="\"seerdex-withdraw\"" --track-account="\"seerdex-deposit\"" max-ops-per-account=1000 
    

    其中的--rpc-endpoint参数为节点监听的websocket RPC IP地址和端口号,需要您替换,此处127.0.0.1为本机,9090是为节点指定的WS端口。

    对于处理充提业务的节点,我们并不需要保存全部数据,仅需要保存和交易所账户相关的账户数据以节省内存开支,因此我们需要设置partial-operations参数和--track-account参数,此处partial-operations=true表示只需要部分的数据,"\"seerdex-withdraw\"""\"seerdex-deposit\""表示要追踪的一个或多个账户id,需要您替换。

    --max-ops-per-account参数设定内存中保留账户的多少条操作记录,此处1000表示保留追踪账户的1000条操作记录,需要您按需求填写。

    5、观察节点运行正常后,ctrl+A d隐藏screen,断开服务器。之后要再打开运行有节点的Sreeen,则使用 screen -R ,或 screen -r seer

    节点正常启动后,会显示像下面一样的3秒一个的出块信息。

    节点正常启动的状态

    如果要关闭节点,则使用control + C

    配置一个SEER命令行钱包

    1、在服务器新建一个名叫cli的窗口,运行seer目录中的命令行钱包程序;

    screen -S cli
    cd~
    seer/cli_wallet -s ws://127.0.0.1:9090 -r 127.0.0.1:9191 -H 127.0.0.1:9192
    

    -s参数可以设置要连接的节点api地址及端口,此处ws://127.0.0.1:9090为上一步中运行的本地节点的websocket RPC地址和端口,您也可以在此处使用局域网或公网中的其他公共api地址,不过有因外部api无法提供服务而导致命令行钱包异常退出的风险;

    -r参数可以设置命令行钱包要监听的websocket RPC地址和端口,此处设为127.0.0.1:9191,负责充提业务的程序可以使用此端口调用命令行钱包进行操作;

    -H参数可以设置命令行钱包要监听的Http-RPC地址和端口,此处设为127.0.0.1:9192,负责充提业务的程序也可以使用此端口调用命令行钱包进行操作。

    2、钱包启动成功后,会显示:

    Please use the set_password method to initialize a new wallet before continuing
    3564395ms th_a       main.cpp:227                  main                 ] Listening for incoming RPC requests on 127.0.0.1:9191
    3564396ms th_a       main.cpp:252                  main                 ] Listening for incoming HTTP RPC requests on 127.0.0.1:9192
    new >>> 
    

    先设置钱包解锁密码,123替换为你想设置的密码

    set_password 123
    

    解锁钱包

    unlock 123
    

    导入账号资金私钥和备注私钥

    import_key seerdex-withdraw 5JkbV8aTaYRVaarTUJQ9Y56cr4QajxNFfCoQj6Q9JFL8XvUZ5CQ
    import_key seerdex-withdraw 5KiSC6rRAEkTj72fg3G3zF8RHmCEgZw7aSXBjKqDfvY2XN1qvyd
    

    显示如下:

    new >>> set_password 123
    set_password 123
    null
    locked >>> unlock 123
    unlock 123
    null
    unlocked >>> import_key seerdex-withdraw  5JkbV8aTaYRVaarTUJQ9Y56cr4QajxNFfCoQj6Q9JFL8XvUZ5CQ
    import_key okok 5JkbV8aTaYRVaarTUJQ9Y56cr4QajxNFfCoQj6Q9JFL8XvUZ5CQ
    3572083ms th_a       wallet.cpp:793                save_wallet_file     ] saving wallet to file wallet.json
    3572084ms th_a       wallet.cpp:467                copy_wallet_file     ] backing up wallet wallet.json to after-import-key-1cd0784e.wallet
    true
    unlocked >>> import_key seerdex-withdraw  5KiSC6rRAEkTj72fg3G3zF8RHmCEgZw7aSXBjKqDfvY2XN1qvyd
    import_key else 5KiSC6rRAEkTj72fg3G3zF8RHmCEgZw7aSXBjKqDfvY2XN1qvyd
    3572941ms th_a       wallet.cpp:467                copy_wallet_file     ] backing up wallet wallet.json to before-import-key-1bece5d8.wallet
    3573189ms th_a       wallet.cpp:793                save_wallet_file     ] saving wallet to file wallet.json
    3573191ms th_a       wallet.cpp:467                copy_wallet_file     ] backing up wallet wallet.json to after-import-key-1bece5d8.wallet
    true
    unlocked >>> 
    

    接入命令行钱包

    可以使用Http-RPC或websocket RPC方式接入命令行钱包。使用JSON-RPC远程调用协议传入相应的指令,即可让命令行钱包进行相关操作或返回需要的信息。

    格式如下(实际使用时不换行无注释):

    { 
        "jsonrpc" : 2.0,//定义JSON-RPC版本
        "method" : "get_block",//调用的方法名,例如转账 transfer ,列出账户余额 list_account_balances 等,此处get_block为返回指令块号的区块信息
        "params" : [1], //方法传入的参数,若无参数则为null,此处1表示块号
        "id" : 1//调用标识符
    } 
    

    Http-RPC接入示例

    可以使用curl命令来测试Http-RPC连接命令行钱包实现获取指定账户的各资产余额:

     curl http://127.0.0.1:9192 -d '{"jsonrpc": "2.0", "method": "list_account_balances", "params": ["seerdex-withdraw"], "id": 1}'
    
     {"id":1,"result":[{"amount":"7861151753754","asset_id":"1.3.0"},{"amount":97099800,"asset_id":"1.3.8"}]}
    

    websocket RPC接入示例

    首先在服务器上安装使用wscat测试ws:

     apt install node-ws
    

    测试通过websocket RPC连接命令行钱包实现一笔转账:

    wscat -c ws://127.0.0.1:9191
    > {"jsonrpc": "2.0", "method": "transfer", "params": ["seerdex-withdraw","ffffff","500000","SEER","Welcome to SEERTALK. https://forum.seerchain.org",true], "id": 1}
    < {"id":1,"jsonrpc":"2.0","result":{"ref_block_num":64292,"ref_block_prefix":1517346144,"expiration":"2018-10-12T07:33:12","operations":[[0,{"fee":{"amount":2136718,"asset_id":"1.3.0"},"from":"1.2.105","to":"1.2.138","amount":{"amount":"50000000000","asset_id":"1.3.0"},"memo":{"from":"SEER8UAbnsAnXY1qr3CD6uzKaRuewsyPF9ynYJJGrdvSfDANxsGNxH","to":"SEER6QbqUZF6xzjdceVoLHS7K1KwvLyszVTZS8bbsQQQXcAm8L3aZp","nonce":"4469110159915322318","message":"482a7d070d298fe2a79d5f528f55778c62584d242274a7d697dae1ec63d7038b5a0b80dc9ba524e3f5f528bc717c60a635f89ff8af1cccbd1b4189f8ddc92e39"},"extensions":[]}]],"extensions":[],"signatures":["204e8746aac14a05fb3c66ac653429dead34bddac58911c53346feb365f0c7b5767ea870c1e5da6a104d8364e42f504fc1bdcfc442652f5c2e9bb9b26a858b0ccd"]}}                                           
    

    切换回命令行钱包所在窗口,可以看到钱包内有如下信息:

    2230368ms th_a       websocket_api.cpp:109         on_message           ] API call execution time limit exceeded. method: transfer params: ["seerdex-withdraw","ffffff","500000","SEER","Welcome to SEERTALK. https://forum.seerchain.org",true] time: 2310335
    

    实现了让钱包进行了一次转账操作。

    常用指令

    get_dynamic_global_properties

    作用:列出链的当前全局动态参数

    示例:{"jsonrpc": "2.0", "method": "get_dynamic_global_properties", "params": [], "id": 1}

    返回信息示例:

    {
    		"id": 1,
    		"result": {
    			"id": "2.1.0",
    			"head_block_number": 3678309,//当前区块高度
    			"head_block_id": "00382065d1057b13415518f913ce26e46fe45cac",//当前块号
    			"time": "2018-10-12T16:37:30",//链上时间(格林尼治时间)
    			"current_witness": "1.5.4",//当前出块的见证人
    			"next_maintenance_time": "2018-10-13T00:00:00",//下次维护更新时间
    			"last_budget_time": "2018-10-12T00:00:00",//上次维护时间
    			"witness_budget": 3398400000,//本期见证人预算总额
    			"accounts_registered_this_interval": 1,//账户注册间隔
    			"recently_missed_count": 0,//最近缺失区块数
    			"current_aslot": 4762199,//当前总块(丢掉的块加实际块高)
    			"recent_slots_filled": "340240787892099949526793007880921399231",//用于计算见证人参与度的参数
    			"dynamic_flags": 0,
    			"last_irreversible_block_num": 3678305//最近一个不可逆块块号
    		}
    }
    

    充提业务需关注 head_block_number 当前区块高度, last_irreversible_block_num 最近一个不可逆块块号。用于判断是否是可信充值操作以及提现是否已处理。

    info

    作用:显示当前Seer区块链的状态

    示例:{"jsonrpc": "2.0", "method": "info", "params": [], "id": 1}

    返回信息示例:

     {"id":1,
     	"result":
     	{
     		"head_block_num":3678258,//当前块高
     		"head_block_id":"00382032d0bfee243b0c5f6b37e3fd6f29682e6e",//当前块号
     		"head_block_age":"0 second old",//上一个区块生成时间
     		"next_maintenance_time":"7 hours in the future",//维护更新时间
     		"chain_id":"da68a9c5f2fd9ed48e626ea301db1c77505523884ba0dd409e779246c6ea26cf",//链号
     		"participation":"88.28125000000000000",//区块生产参与率
     		"active_witnesses"://活跃见证人ID
     		["1.5.1","1.5.2","1.5.3","1.5.4","1.5.5","1.5.6","1.5.7","1.5.8"],
     		"active_committee_members"://活跃理事会成员ID
     		["1.4.0","1.4.1","1.4.2","1.4.3","1.4.4","1.4.5","1.4.6","1.4.7"]
     	}
     }
    

    充提业务需关注 head_block_age 上一个区块生成时间,participation 区块生产参与率。 提现操作前判断区块链是否正常运行。

    list_account_balances

    格式:list_account_balances name

    参数:name可以是账户名,也可以是账户的id

    作用:列出账号为id的账户的各资产余额

    示例:{"jsonrpc": "2.0", "method": "list_account_balances", "params": ["abc"], "id": 1}

    返回信息示例:

    {
    		"id": 1,
    		"result": [{
    			"amount": "7861177753754",//余额,精度5,amount没有小数点,其数值被乘以了10000 此处即78611777.53754
    			"asset_id": "1.3.0"//资产类型 此处为SEER
    		}, {
    			"amount": 97099800,//余额,精度5,amount没有小数点,其数值被乘以了10000 
    			"asset_id": "1.3.8"//资产类型 此处为测试链上的ABC资产
    		}]
    }
    

    充提业务需关注asset_id为1.3.0(即SEER)的amount (余额)是否足够并支付网络手续费,若涉及SEER链上其他资产的充提业务,则还需要关注相应资产的余额是否足够。

    transfer2

    格式:transfer2 from to amount asset_symbol memo broadcast(true/false)

    参数:from为转出账户,to为接收账户,amount为转账数量, asset_symbol为资产名,memo为备注。from/to 可以是用户名或者id,broadcast设置是否广播。

    作用:转账

    示例:{"jsonrpc": "2.0", "method": "transfer2", "params": ["seerdex-withdraw","ffffff","500000","SEER","Welcome to SEERTALK. https://forum.seerchain.org",true], "id": 1}

    返回信息示例:

    {
    	"id": 1,
    	"jsonrpc": "2.0",
    	"result":[
    		"7ab0e58b6391a770cb62f432e0f2aef93de4d18e",//交易id
    		{
    		"ref_block_num": 64292,//引用的区块号
    		"ref_block_prefix": 1517346144,//引用的区块头
    		"expiration": "2018-10-12T07:33:12",//交易过期时间
    		"operations": [
    			[0, {//0表示转账
    				"fee": {//手续费
    					"amount": 2136718,//金额 ,amount没有小数点,其数值被乘以了10000 
    					"asset_id": "1.3.0"//资产 此处表示SEER
    				},
    				"from": "1.2.105",//转出账户id
    				"to": "1.2.138",//转入账户id
    				"amount": {
    					"amount": "50000000000",//金额 amount没有小数点,其数值被乘以了10000 
    					"asset_id": "1.3.0"//资产 此处表示SEER
    				},
    				"memo": {//memo权限相关
    					"from": "SEER8UAbnsAnXY1qr3CD6uzKaRuewsyPF9ynYJJGrdvSfDANxsGNxH",
    					"to": "SEER6QbqUZF6xzjdceVoLHS7K1KwvLyszVTZS8bbsQQQXcAm8L3aZp",
    					"nonce": "4469110159915322318",
    					"message": "482a7d070d298fe2a79d5f528f55778c62584d242274a7d697dae1ec63d7038b5a0b80dc9ba524e3f5f528bc717c60a635f89ff8af1cccbd1b4189f8ddc92e39"
    				},
    				"extensions": []
    			}]
    		],
    		"extensions": [],
    		"signatures": ["204e8746aac14a05fb3c66ac653429dead34bddac58911c53346feb365f0c7b5767ea870c1e5da6a104d8364e42f504fc1bdcfc442652f5c2e9bb9b26a858b0ccd"]
    		}
    	]
    }
    
    

    充提业务需关注返回信息的第一个字符串,即交易id,另expiration 交易过期时间。

    get_account_id

    格式:get_account_id name

    参数:name是账户名

    作用:列出账户name的账户id

    示例:{"jsonrpc": "2.0", "method": "get_account_id", "params": ["seerdex-withdraw"], "id": 1}

    返回信息示例:

    {"id":1,"result":"1.2.105"}
    

    get_relative_account_history

    格式:get_relative_account_history name start limit end

    参数:name可以是账户名或id,start为返回结果的最小编号,limit 为返回结果的数量上限,end为返回结果的最大编号;

    返回数据排序方式为按时间顺序,越新的越靠前;

    编号从1开始,若end = 0,则返回最新的limit条操作信息;

    若end - start > limit,则返回满足条件的最新的limit条操作信息。

    作用:列出账户name的操作历史记录

    请避免一次性返回超过100条数据,以免节点或钱包报错。同时,在命令行钱包中使用此命令时只会返回 "description"中的数据,用RPC调用方能返回完整数据。

    示例:{"jsonrpc": "2.0", "method": "get_relative_account_history", "params": ["seerdex-withdraw",15,1,30], "id": 1}

    返回信息示例:

    {
    		"id": 1,
    		"result": [
    			{
    			"memo": "give you 980 SEER",//解锁并有相应私钥的钱包方能显示MEMO
    			"description": "Transfer 980 SEER from alice to okok -- Memo: give you 980 SEER   (Fee: 21.05468 SEER)",//钱包一般只显示此内容
    			"op": {
    				"id": "1.9.703568",//该操作的对象id,可通过get_object 1.9.703568查看此操作
    				"op": [
    					0, //操作类型,0表示转账
    					{
    					"fee": {//手续费
    						"amount": 2105468,//数额
    						"asset_id": "1.3.0"//资产类型
    					},
    					"from": "1.2.109",//转出id
    					"to": "1.2.105",//接收id
    					"amount": {
    						"amount": 98000000,//转账数额
    						"asset_id": "1.3.0"//资产类型
    					},
    					"memo": {//MEMO权限相关
    						"from": "SEER6sJwPuSSayEzHXLbVgw9HJsDnGBk5Dup5bq3ns1YziZEDMKMgU",
    						"to": "SEER8UAbnsAnXY1qr3CD6uzKaRuewsyPF9ynYJJGrdvSfDANxsGNxH",
    						"nonce": "394073041834538",
    						"message": "485e630438b9a38c94c12afd9b15007845484d7f0c8c2c29c135f4f9a155a1ee"
    					},
    					"extensions": []
    				}],
    				"result": [//操作返回结果
    					0, 
    					{
    
    					}
    				],
    				"block_num": 3674099,//入块高度
    				"trx_in_block": 0,//操作所属交易在区块内的位置
    				"op_in_trx": 0,//操作在交易内的位置
    				"virtual_op": 52924//虚拟操作编号
    			}
    		}]
    }
    

    get_relative_account_history会列出和此账户有关的所有操作,例如自己转账给别人(包括提现)、别人转账给自己(包括充值)、账号注册、参与预测等;

    充提业务只需关注op.op.N(操作类型)为0,即转账的操作;

    当然最重要的是memo(转账MEMO)和op.op.amount.amount(转账数额)以及op.op.amount.asset_id(资产类型);

    以及op.op.from(转出id),若同一个账号即负责充值又负责提现,则判断op.op.from是否和get_account_id获得的当前账户一样来区分该笔操作是否是本帐户发起的提现操作;

    op.id为该操作的对象id,也是该转账操作的唯一id;

    另外,还需要关注op.block_num,即该操作的入块高度,
    op.trx_in_block 该操作所属交易在该区块内的位置,
    op.op_in_trx 该操作在该交易内的位置,
    以及op.virtual_op 该操作的虚拟操作编号。

    以上四个数据可以和其他指令配合获得该操作所属的txid及判断该操作的唯一性。

    get_block

    格式:get_block num

    参数:块号

    作用:显示第num个块的概况

    示例:get_block 2090482

    返回信息示例:

    get_block 2090482
    {
      "previous": "001fe5f1e1dd8d195af805484ee8038a09866b76",//上一个块的块号
      "timestamp": "2018-07-30T07:31:54",//时间戳
      "witness": "1.5.22",//见证人
      "transaction_merkle_root": "72756b0f1f1711622c8030eae65e6db055200320",
      "extensions": [],
      "witness_signature": "200d202d735de10f4f8213d71a8f946a2cc49bc02e930f682bea74321819b4bc7c4d436e366f1cad962f214eeaa42b5030fd716f692077f135b3cf33c688f68f1f",//见证人签名
      "transactions": [{
          "ref_block_num": 58864,//引用的区块号
          "ref_block_prefix": 2207768636,//引用的区块头
          "expiration": "2018-07-30T07:33:51",//交易过期时间
          "operations": [[
              0,{
                "fee": {
                  "amount": 200000,//手续费 
                  "asset_id": "1.3.0"//资产类型 1.3.0指SEER
                },
                "from": "1.2.1250",//发起用户ID
                "to": "1.2.1292",//接收用户ID
                "amount": {
                  "amount": 2000000000,//金额20000
                  "asset_id": "1.3.0"//资产类型 1.3.0指SEER
                },
                "extensions": []
              }
            ]
          ],
          "extensions": [],
          "signatures": [
            "205c1f92cd9eebba507094c0fe4a05be47d301b6b2e989f4f0fdcfc8acef69ceec5356faf1667b5576629bfbc29ee5a257dbfac935c5a8fef588e32d7a7902c2b3"//交易签名集合
          ],
          "operation_results": [[
              0,{}
            ]
          ]
        }
      ],
      "block_id": "001fe5f26d0f3ee5b1569a1618fe903e4dc5aef0",//块号
      "signing_key": "SEER5oyAoCzw5GRD9unKK6vsLXkPVx1aKU7i3hX19E8BRU5u3FoAoA",//见证人签名公钥
      "transaction_ids": [
        "30e73f68d163398005557a21c58bd751db22eb53"//交易id集
      ]
    }
    

    充提业务需需配合get_relative_account_history中获取的op.block_num来关注get_block获取的transaction_ids数据,若同一个块里有多笔交易,则会有多个transaction_id,需配合get_relative_account_history中获取到的op.trx_in_block来得到该操作所对应的txid。

    处理充值业务

    1、通过get_relative_account_history查询账户相关历史。

    返回结果中并没有直接显示每条记录的序号,需要自行获取和记录。

    建议:从start = 1,limit = 1, end = 2开始以一定时间间隔发送请求,每次start 和 end 各自 +1,limit恒等于1,若返回信息不为空,则将该条信息编号并存储。若返回信息为空:{"id":1,"jsonrpc":"2.0","result":[]},则表示没有新的操作,等待有新的操作信息时继续记录存储。

    2、判断是否为充值业务。

    get_relative_account_history会列出和此账户有关的所有操作,例如自己转账给别人(包括提现)、别人转账给自己(包括充值)、账号注册、参与预测等,充提业务只需要op.op.N(操作类型)为0(转账)的操作数据;

    若同一个账号即负责充值又负责提现,则需要区分op.op.from是否和当前账户id一样,,若一样,则是本帐户发起的提现操作,需要排除掉;

    剩下的便是待处理的充值操作。

    3、获得相关充值数据。

    通过Http-RPC或websocket-RPC连接的命令行钱包在unlocked状态时,在get_relative_account_history返回的信息中可以查看memo内容,用户填写的交易所ID等入账信息便从此处获取;

    通过op.op.amount.amount(转账数额)加上小数点,便是充值数额;

    通过op.op.amount.asset_id(资产类型)来判断是否是平台支持的正确资产类型。

    4、判断是否为可信操作。

    不同于比特币和以太坊采用确认数来从概率上降低交易被退回的可能性,像SEER这样的石墨烯项目中有不可逆块的概念,不可逆块及更早区块中的交易,可以保证不会发生回退。

    get_relative_account_history会返回该笔操作所属的op.block_num(入块高度),但即使交易未入块,仍然可能出现在账户历史中,因此需要和通过get_dynamic_global_properties获取到的last_irreversible_block_num(最近一个不可逆块块号)比较,op.block_num必须小于或等于last_irreversible_block_num,才能被视为可信操作。

    5、记录下该操作的相关信息。

    get_relative_account_history中获取到的op.block_num+op.trx_in_block + op.op_in_trx + op.virtual_op 组合到一起,标识该操作的唯一性,可识别避免重复操作;

    get_relative_account_history中获取到的op.id也是该转账操作的唯一id;

    可以通过get_object op.block_num 获取该转账操作所在块的信息,再通过op.trx_in_block的数值来获取到块信息中transaction_ids数组里该转账操作对应的txid,同一个txid可能对应多个操作。

    6、如果有充值的MEMO或资产类型不正确,建议不要直接退回,而是等待用户主动联系确认退回路径,因为用户可能是通过交易所或第三方平台提现过来充值的,直接退回但没有对方MEMO可能会造成处理困难甚至资产损失。

    处理提现业务

    1、提现操作前检查区块链网络是否正常运行

    提现业务需关注区块链网络是否正常运行状态,只在网络正常时处理提现。

    通过info指令获取到head_block_age(上一个区块生成时间),须在1分钟以内,participation(区块生产参与率)须在80以上,表示80%的区块生产者在正常工作。

    同时get_dynamic_global_properties指令获取到的 head_block_number(当前区块高度)和 last_irreversible_block_num(最近一个不可逆块)相差不会太大,一般在30以内。

    2、检查提现账户余额

    通过list_account_balances列出账户各资产余额,检查asset_id为1.3.0(即SEER)的amount (余额)是否足够并支付网络手续费,若涉及SEER链上其他资产的充提业务,则还需要关注相应资产的余额是否足够。

    3、转账并跟踪操作是否成功

    通过transfer2向用户转账相应数额的指定资产。

    需关注返回信息中的交易id,向用户提供此信息可以让用户在区块浏览器查询自己的提现操作在区块链上的状态和信息,在转出目标未到账的情况下确定该笔操作是否已出账;

    关注transfer2返回信息中的expiration(交易过期时间),转账操作发出后,一般很快可以从get_relative_account_history中获取到该笔转账操作的信息,并通过op.block_numlast_irreversible_block_num比较来确认入块;

    (1)若确认入块,则返回信息中的交易id应该已经存在于get_object op.block_num 获取该转账操作所在块信息的transaction_ids数组中。

    (2)若发出的转账操作超过了expiration还未确认入块,则这笔交易可能由于您同时广播的操作太多等各种原因未被区块链打包并已经被丢弃,此时重新发起转账是安全的。

    本文由seer爱好者提供,可能理解有误,欢迎到github指出:https://github.com/akirasen/seerdocs/tree/master/zh-Hans

    展开全文
  • 关于交易所USDT充提问题的分析

    千次阅读 2018-06-29 17:50:16
    随后各大交易所相继暂停USDT的充提:火币、OKex等大平台开启自查,并于晚间发布了相关信息:该安全公司报道,交易所在进行USDT充值交易是否成功时存在逻辑缺陷,未校验区块链上交易详情中valid字段是否为true,导致...

    昨日晚间,有安全公司突然发表言论:提醒各大交易所尽快暂停 USDT 充值功能,并自查代码是否存在逻辑缺陷。


    随后各大交易所相继暂停USDT的充提:



    火币、OKex等大平台开启自查,并于晚间发布了相关信息:



    该安全公司报道,交易所在进行USDT充值交易是否成功时存在逻辑缺陷,未校验区块链上交易详情中valid字段是否为true,导致“假充值”,用户未损失任何USDT却成功向交易所充值USDT代币,而且这些USDT可以正常使用。



    那么什么是USDT?


    USDT的发行和交易使用的是Omni(原Mastercoin)协议,它是一个基于比特币区块链的2.0币种。USDT的交易确认等参数与比特币是一致的。


    用户可以通过SWIFT电汇美元至Tether公司提供的银行帐户,或通过交易所换取USDT。赎回美元时,反向操作即可。用户也可在交易所用比特币换取USDT。Tether公司严格遵守1:1的准备金保证,即每发行1枚USDT代币,其银行帐户都会有1美元的资金保障。用户可以在Tether平台进行资金查询,以保障透明度。


    对交易所有什么影响?


    USDT因为其价值不受市场因素波动,固定锚定兑换美元,交易所常以它作为平台的基准币(法币),用户也可以在币圈预计低潮的时候,将其它代币转换为USDT,作保值处理。


    漏洞分析


    经过我们分析,此次漏洞是因为,交易所可能没有对用户USDT充值交易进行确认,导致用户可能“假充值”,根本原因是再进行区块链Dapp开发时,对区块链接口开发理解不充分、没有做好严格安全把控。


    链安科技专注区块链智能合约安全,但是安全无小事,无论是区块链智能合约安全,还是区块链平台接口使用安全,或者平台本身的安全都非常重要。我们目前重点关注区块链智能合约的安全,未来不排除开展更多的区块链安全方面的服务,让区块链生态更安全。

    展开全文
  • 交易所的信息显示,交易所已经暂停全部币种的充提。 针对此问题,安CEO赵长鹏发推特表示,亚马逊服务器AWS遇到了一些问题,主要是在缓存服务方面,导致影响了全球的部分用户。 KuCoin官方微博也表示,...

    39dbe0f3852125058bd28088a60ea0d0.png

    2019年8月23日13时左右开始Amazon Web服务出现故障,发生故障的服务是EC2,东京地区的亚太服务器(ap-northeast-1)的通信部分出现了故障,此后,被附接至一些实例的EBS性能出现恶化,并且EC2的API也增加了延迟和错误说明,随后,EC2中还添加了被管理数据库服务Amazon RDS连接的问题。

    受此影响,“Azulene”,“Grasma”等多款游戏出现故障,此外,受影响的还有加密货币交易所。

    834fdab10c7675ac59881f2bd2ce40ec.png

    币安交易所的信息显示,币安交易所已经暂停全部币种的充提。 针对此问题,币安CEO赵长鹏发推特表示,亚马逊服务器AWS遇到了一些问题,主要是在缓存服务方面,导致影响了全球的部分用户。

    KuCoin官方微博也表示,目前因AWS 东京A机房部分机架温度过高,可能波及我们的服务,导致部分服务出现不可用,目前运维团队正在准备跨区域高可用相关资源的部署,应对可能发生的情况。部署期间可能对部分服务造成影响。

    其他交易所也出现了瞬间扎针,数据错乱等问题,有交易所出现0.32美金的价格成交40个比特币的情况,是否是东京亚马逊服务故障所导致,媒体还在进一步核实之中。

    展开全文
  • // AdaBlocksChainCheck 根据提币的数量,提币方地址以及目标方地址来检查提币是否已经confirmed. // 返回值有两个:提币状态以及已收到的提币数量(扣除手续费) func AdaBlocksChainCheck(withdrawAmount float64,...
  • 纯java区块链火币/币安/交易所/...5:我的资产功能(币、提币、划转);6:订单管理功能(C2C订单、杠杆交易订单);7:个人中心实名认证;8:安全中心(手机号绑定)9:收款方式;10:我的推广码11:系统公告;12:涨跌...
  • 使用Node.js在AMM交易所上自动交易代币简单示例

    千次阅读 热门讨论 2021-06-05 20:20:43
    随着三大交易所公链及其它交易所公链的流行,Fork Uniswap的AMM交易所如雨后春笋般遍地出现。与中心化交易所相比,AMM算法没有搓合订单机制,也就是无法以指定购买价格挂单,用户只有不停的去看价格并现场交易才能以...
  • 造成充提币拥堵是怎样产生的呢?技术专家告诉我们,交易所钱包系统与交易所网站是分开的,他们分别在不同的网络系统上运行,通过数据库通信进行数据对接,每个账户钱包就是一个地址。以ETH为例,如果用户充币,钱包...
  • 交易所数据不透明Chain.info带你探寻交易所地址挖掘全过程 链节点原文链接:https://www.chainnode.com/post/397692 转载请详注 2018年12 月, 区块链透明度研究机构(BTI)发布的报告指出, CoinMarketCap 上...
  • 16号爆出徐某被警方带走调查事件之后,OKEX暂停充提币,OKB也出现了20%的跌幅,矿池算力一度下跌60%,成为了当前大家热议的话题,看热闹的不嫌事大,但是我们讲解这个话题的本身是去解决在OKex有币的朋友解决疑难, ...
  • // 提币-Submit a withdraw request $app->market->withdrawApply($params); // 提币-提交提现请求 $app->market->withdraw($params); // 获取充值历史(支持多网络) $app->market->capitalDepositHistory($params);...
  • 本文从技术角度对交易所钱包系统搭建流程进行了梳理,分为搭建区块链钱包节点、搭建交易所钱包系统、实现充提币对接、指令和调用方式四大模块。# 搭建区块链钱包节点一、USDT/BTC(1)搭建BTC/USDT节点并同步数据git...
  • 比特不是由中央银行发行,它依据特定算法,通过“挖矿”产生,使用网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节安全性。二、比特能做什么?1. 升值...
  • 交易所基础概念和专业术语
  • 提币功能的实现

    千次阅读 2018-09-20 11:16:50
    之前已经写好了send raw transaction的模块,链上操作就复用之前写好的代码,本篇主要描述提币的链下逻辑。 按步骤来: 1. 提币从用户发起请求开始,后端收到请求创建一个待确认提币请求记录,发送验证信息给用户...
  • 1.WD,现在很多台子都支持充币,然后很多币友经常向台子的地址充币,频繁的充提币会触发风控,所以要做c3认证 2.一机多号,IP容易被识别,而且账户之间相互充提币也十分容易触发风控; 3.多账号提币充币地址相同,...
  • Huobi Prime 首发项目 TOP Network 即将上线香港数字货币交易所币成(Coinsuper),6月4日12点(GMT+8)开放提充币,6月6日17点(GMT+8)开放 TOP 对 USD/BTC 自由交易。上线后,TOP 总流通量保持在 25 亿左右不变,...
  • Filecoin 充值上账文章目录一、描述二、充值上账的流程读取指定高度的TipSet【ChainGetTipSetByHeight】读取区块内消息【ChainGetBlockMessages】累计区块消息去重遍历匹配自己地址确认交易状态合理的创建标题,有助...
  • 客服全面撒网,老师带单下饵,引流“野鸡”,割完就消失。
  • 做了解之后,我了一点体验了一下,下面是我对BTBTOP这个平台的深入分析,主要是从四个大方向来讲:平台基本情况、使用体验、服务体验、优惠活动。基本上想要了解一家交易所从这四方面来分析是最直接的,最后我会...
  • 5:我的资产功能(币、提币、划转);6:订单管理功能(C2C订单、杠杆交易订单);7:个人中心实名认证;8:安全中心(手机号绑定)9:收款方式;10:我的推广码11:系统公告;12:涨跌幅排行榜;13:解释说明;后台主要...
  • 第一个要对接的是比特币BTC,因为BTC的提现过程比较简单,用户在交易所提交提币需求,然后由交易所进行审核,接着进行系统打币或者人工打币。 交易所对接比特币钱包的方式 交易所对接比特币钱包的方式有...
  • 据悉,数字交易所不安全主要来自以下几点:账户仅靠密钥的用户机制,安全保障手法单一,无法应对黑产通过钓鱼网站、网站挂马、木马等多种手段进行的盗号,让黑客有机可乘,对平台资产、用户账户进行提币;...
  • 第六步,前往火币,Ok或币安交易所Waves转账页面(三大交易所支持的Waves都是基于Waves主网的),将该地址复制到转账对话框,输入数量和密码,点击提币。 第七步, 返回Waves.Exchange,查看账户余额。 以上就是...
  • OpenFinance Network Token: SPiCE VC Total Supply: 8,468,899.64 SPICE Holders: 272 addresses ...S3 (智能证券标准,支持发行,KYC,AML与二级市场的交易) 兼容 ERC-20 Contract: 0x0324dd195d0cd53f9f07b...
  • 2019年以来,随着交易所首次发行代币募资(IEO)火爆,“项目方代币遭抢上”这样事件开始频繁出现。而抢上代币背后,又涉会及纷繁复杂的利益纠葛。众多小交易所通过这种方式,...
  • 其次解欧易风控也是越来越难,要各种流水、视频、提币或者币缘由等等资料,很多用户表示实在变态,这些资料怎么可能提供得了。小编告诉你,即使你按照要求提供了流水、视频,欧易也不会直接给你解开的,最差情况...
  • 1月15日到1月16日,通过ZT交易所即ZT.COM数字货币交易平台的K线观察到,有“欧洲以太坊”之称的Aeternity阿姨AE,创出一波又一波的新高,24小时涨幅达到20%,领涨大盘普跌的数字货币市场。差点以为是ZT交易所的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,504
精华内容 601
热门标签
关键字:

交易所充提币

友情链接: 新建文件夹.zip