井通开发者平台
详情请参考:http://developer.jingtum.com/chapter1_start.html
井通区块链开发者文档文档内容
API
SDK
接入流程
企业和商户需要先在井通银关上面注册,同意基本的网络使用协议,这样才可以接入井通区块链系统,注册流程如下。
第一步,注册企业银关
开立注册中,需求填写商户账号信息,且之后不能修改,同时请同意井通银关服务条款。
第二步,企业银关认证
这一步需要提交企业营业执照等信息以便井通公司实施认证。井通公司需要用户提供真实可信的企业信息,认证时间大概需要1-2天时间。
第三步,企业银关申请资源
认证通过之后,用户会获得一组商户代码和商户密钥,可用于申请用户通资源,进行业务流程的构建。 用户通的申请可以通过井通银关上的相应页面进行。
第四步,企业银关发行资源
商户可以在银关提供的资源发行界面中进行用户通资源的发行,或者可以使用井通银关提供的资源发行API/SDK接口在自己的业务系统里面进行资源的发行,具体步骤请参考API和SDK指南。
基本概念
SWT,System Working Token
SWT,是井通区块链原生的数字资产,作用类似于比特币系统中的Bitcoin或以太坊中的ETH,是井通系统内交易所需的介质。
SWT本身的作用有两方面,一方面提供用户在井通系统中建立有效账户的凭据;另一方面是用户在井通系统中交易的费用消耗。 同时,SWT保障系统运行的稳定和安全,提高恶意攻击的成本。交易中消耗的SWT费用,由系统本身回收进行循环利用。
Tum,用户通
Tum,用户通是企业在井通区块链上发行和使用的智能电子资产的统称。用户通的发行,使用和回收都会记录在区块链中。 这些记录都会签名后加盖时间戳,并存储在多个服务器上以便查询。 用户通的发行须由企业向井通银关申请。申请内容需要包括公司的基本信息和发行信息,具体请参考用户指南。 企业发行的用户通由企业的信用提供保证,可以用来为用户提供多种服务,比如作为企业服务的优惠券,代金券等。
FinGate,银关
FinGate, 银关是井通对企业和商户等B端的建模,是区块链中服务的接入点, 也是各个企业和商户的管理端。
银关的主要功能如下:
管理企业和商户的用户
企业和商户通过银关解决其相应用户接入区块链的问题,为他们的用户提供可信的接入服务,同时解决用户实名认证问题, 满足政府部门监管需求,为用户提供区块链服务。
管理企业和商户的资源
企业和商户可以通过银关发行属于自己的用户通资源,例如发行企业内部积分、发行商户优惠券、发行商户积分等, 为企业的业务流程构建提供支持,同时可以通过银关为企业部署合约等提供区块链入口,为企业智能合约的执行提供一个便捷的操作平台。 井通银关有不同的工作模式。
目前DEVELOPMENT模式为测试模式,PRODUCTION模式为正式模式。
Smart Contract,智能合约
Smart Contract,智能合约是执行在区块链上面的合约程序,通过区块链提供不可停止的可信计算功能,保障了合约的自由执行, 所以在井通系统中智能合约也称为自由合约。智能合约是解决多方在业务功能执行上面信任的问题,保障多方共同信任某一合约功能的执行, 解决现实世界中执行的可信问题。
智能合约的执行是不可停止的,所以智能合约需要通过在合约中构建可以满足现实需求的合约功能,包括监督、行政以及监管的功能, 通过合约本身的机制来符合业务的需求。
井通智能合约提供基本的、可靠的合约模板满足基本的大部分的合约需求,同时也提供自由编程的模式,为合约高级用户提供丰富的功能, 基本的功能包括合约部署,合约驱动以及合约停止等功能。
交易模式
井通区块链有三种工作模式,分别是同步模式、异步模式以及订阅模式,其中订阅模式是井通系统推荐的使用模式。 用户异步提交交易请求,之后井通系统将交易结果推送给用户,让用户实现和井通系统的全方位交互模式。
同步模式
同步模式Synchronous Mode,同步模式是用户请求对服务的操作之后,同步等待交易结果的返回。 同步模式可以即时获得交易结果,为用户之后的操作提供交易信息,同步模式的处理流程是顺序性的。 同步模式需要等待服务器对交易的确认,即等待交易的入账,有一定的延迟和阻塞。 在同步模式中,用户即时做出请求,之后服务端即刻返回结果给用户,用户被阻塞在该请求中,直至该请求返回。
异步模式
异步模式Asynchronous Mode,是用户请求对服务的操作之后,用户就进行其他操作,之后再查询交易的结果,不用等待交易结果的返回。 异步模式为用户提供了快捷的服务操作模式,只要用户钱包数额的充足以及交易信息的有效,井通系统保证用户交易的成功。 异步操作减少了对系统资源的占用,避免阻塞,提高了程序的效率。异步操作需要程序之后查询交易的结果。 在异步模式下,用户请求之后用户即可执行其他的操作,之后用户通过查询来获得请求的结果, 用户不阻塞在请求操作中,可以提供用户请求的并发量,但需要用户之后自己主动查询下交易结果。
订阅模式
订阅模式Subscription Mode,订阅模式让用户的交易操作,不需要对交易结果进行查询操作。井通系统将用户的交易结果推送给用户, 避免用户的轮询操作。 同时,订阅模式将用户的被动交易信息也推送给用户,例如用户收到他人的支付、用户的挂单操作被他人吃掉等,无需用户主动查询。 在订阅模式中,用户提交请求之后,也不阻塞在请求操作中,之后服务端将请求结果通知给用户,消除用户查询交易结果的动作, 使用户专注在业务上面。
账号类交易
创建账号
井通账号是非对称密码学上的公钥和私钥的编码,用户可以随时生成新的账号。但是在井通系统中,账号需要有在井通系统登记后才能使用系统功能。这一过程是通过井通系统内的已有账号支付一定量的井通(SWT)实现新账号的登记,也称之为“激活”。
商户可以通过商户银关进行账号的激活,银关需先配置具有一定数量的SWT来完成多个账号的激活。系统默认的最小激活值是25 SWT, 银关可以设置比这个值大的激活值。
账号是用户在区块链系统的操作对象,用户可以通过静态方法创建一个新的井通账号,也可以通过已有的账号的密钥生成一个账号,又称为钱包。 通过已经激活的井通账号可以直接生成账号对象,从而实现井通系统中一系列相应的操作,如支付数字资产,挂单数组资产,以及查询账号的。生成账号时必需提供账号私钥。公钥则可以省略, 由SDK通过私钥计算生成。如果同时提供私钥和公钥,那么输入时私钥在前,公钥在后。
Java Example
// get fingate instanceFinGatefingate=FinGate.getInstance();// set fingate accountfingate.setAccount("snqFcH......pQYzxEEbW");// set development mode(optional)fingate.setMode(FinGate.DEVLOPMENT);// set fingate parameters(optional)fingate.setActiveAmount(25);// method 1. create account from fingateWalletwallet1=fingate.createWallet();// activate itfingate.activateWallet(wallet1.getAddress(),newPaymentListener(){@overridepublicvoidonComplete(result){}});// method 2. create account from secretWalletwallet2=newWallet("snqFcH......pQYzxEEbW");
Python Example
# get fingate instancefingate=FinGate();# set fingate accountfingate.setAccount("snqFcH......pQYzxEEbW");# set development mode(optional)fingate.setMode(FinGate.DEVLOPMENT);# set fingate parameters(optional)fingate.setActiveAmount(25);# method 1. create account from fingatewallet1=fingate.createWallet();//activateitfingate.activateWallet(wallet1.address,callback);//method2.createaccountfromsecretwallet2=Wallet("snqFcH......pQYzxEEbW");
PHP Example
// get fingate instance$fingate = FinGate::getInstance();// set fingate account$fingate->setAccount("snqFcH......pQYzxEEbW");// set development mode(optional)$fingate->setMode($fingate->modes::DEVLOPMENT);// set fingate parameters(optional)$fingate->setActiveAmount(25);// method 1. create account from fingate$wallet1 = $FinGate->createWallet();// activate it$fingate->activateWallet($wallet1->getAddress(), $callback);// method 2. create account from secret$wallet2 = new Wallet('snqFcH......pQYzxEEbW');
Node.JS Example
// get fingate instancevarfingate=require('jingtum-sdk').FinGate;// set fingate accountfingate.setAccount("snqFcH......pQYzxEEbW");// set development mode(optional)fingate.setMode(FinGate.DEVLOPMENT);// set fingate parameters(optional)fingate.setActiveAmount(25);// method 1. create account from fingatevarwallet1=fingate.createWallet();// activate itfingate.activeWallet(wallet1.address,function(err,result){// process result});// method 2. create account from secretvarWallet=require('jingtum-sdk').Wallet;varwallet2=newWallet('shNKNNtxg......AKBFy5W5kK');
账号余额
每个账号容纳用户的资产,包括SWT资产和用户通资产。余额是一个资产列表,每个项目包括资产编码、资产数量以及资产对应的发行银关, 同时根据用户的操作每个用户的资产余额里面还有冻结项目,例如用户挂单卖出CNY,则部分的CNY被冻结了。
在井通系统中,SWT还作为用户资源占用的计数,包括账号资源占用,市场单子资源占用,关系资源占用等。例如每个账号占用10个SWT, 每个提交的货币挂单占用1SWT,每个关系资源占用1SWT等。对于初始账号,一般是占用11个SWT。
余额的查询可以使用用户通的符号进行查找,仅返回相应用户通的余额。
Java Example
// construct one walletWalletmy_wallet=newWallet("snqFcH......pQYzxEEbW");// get all balancesBalanceCollectionbc=my_wallet.getBalance();// get swt balanceBalanceCollectionbc=my_wallet.getBalance("SWT");// get usd balanceBalanceCollectionbc=my_wallet.getBalance("USD");// get specified issuer usd balanceBalanceCollectionbc=my_wallet.getBalance("USD","jMcCACcfG37xHy7.....FCk7tT");
Python Example
# construct one walletmy_wallet=newWallet("snqFcH......pQYzxEEbW");# get all balancesbc=my_wallet.getBalance();# get swt balancebc=my_wallet.getBalance('SWT');# get usd balancebc=my_wallet.getBalance('USD');# get specified issuer usd balancebc=my_wallet.getBalance('USD','jMcCACcfG37xHy7.....FCk7tT');
PHP Example
// construct one wallet $my_wallet = new Wallet('snwjtucx9......MbVz8hFiK9'); // get all balances $bc = $my_wallet->getBalance(); // get swt balance $bc = $my_wallet->getBalance("SWT"); // get usd balance $bc = $my_wallet->getBalance("USD"); // get specified issuer usd balance$bc = $my_wallet->getBalance('USD','jMcCACcfG37xHy7.....FCk7tT');
Node.JS Example
varWallet=require('jingtum-sdk').Wallet;// construct one walletvarmy_wallet=newWallet('shNKNxg......AKBFy5W5kK');// get all balancesmy_wallet.getBalance(function(err,data){// process balance});// get swt balancemy_wallet.getBalance('SWT',function(err,data){// process balance});// get usd balancemy_wallet.getBalance('USD',function(err,data){// process balance});// get specified issuer usd balancemy_wallet.getBalance('USD','jMcCACcfG......vjLM5FCk7tT',function(err,data){// process balance});
网友评论