终端用户访问 InfoChain
终端用户可以根据InfoChain访问接口,通过一个InfoChain节点网络,查询或修改InfoChain组下的区块链中存储的数据。
假设终端用户是一个网站开发者,想要使用InfoChain作为数据存储,他已经从节点创建者那里知道了一个节点网络名称和相关密码。 然后他需要选择或开发一个合适的消息传输应用程序来连接到InfoChain节点网络。
InfoChain提供了两个消息传输应用程序来连接终端用户和InfoChain节点。
Deliver
终端用户可以从菜单”资源“ > "下载" 下载Deliver程序,并复制到网站服务器或与网站服务器同内网域的其他PC上。Delivers 有两个版本,分别用于 Linux(Ubuntu) 和 Windows 部署。
第一次启动Deliver时,需要配置一些参数:
-n: 要连接的 InfoChain 节点网络的名称
-p: 节点网络密码
-P: Deliver的监听端口,如果不指定,监听端口为4321
例如, ./Deliver -n MyNodeABC -p 12345678
表示该 Deliver 将监听默认端口 4321,连接到名为 MyNodeABC 的节点网络,密码为 12345678。
要在Linux下运行Deliver,用户必须具有管理员权限,并在提到安装n2n应用程序时输入系统密码。 要在 Windows 下运行 Deliver,需要以管理员身份启动命令行处理器。
终端程序的网络管理员需要为Deliver 配置防火墙规则,打开 UDP端口9999,和 TCP 端口 15793,15794和 15799。
CommDeliver
此应用程序适合希望尝试InfoChain功能或难以部署Deliver的用户。 用户无需下载此应用程序并将其部署到他的设备上,只需在请求中输入一些参数即可。 之后的示例将提供更多详细信息。
注意:CommDeliver 是公用的消息转发器,数据将传输到具有公共 URL 的服务器,其他用户也可以访问该服务器。 出于效率和安全考虑,开发者应避免在正式的应用里使用 CommDeliver。
现在开发人员可以编写他的源代码来访问InfoChain。 我们提供了一些 JavaScript 示例来解释如何创建 InfoChain 请求。
例1. 通过CommDeliver来进行记录查询
<head>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/sha256.js"></script>
<script src="https://InfoChain.link/Interface/js/Deliver.js"></script>
</head>
<script>
function CreateUser()
{
var chain=new ChainRequest(“192.168.1.146",”4330”);
//var chain=new ChainRequest();
//chain.SetPhpServerFolder("./php");
var requestItems={};
requestItems[“Func”]=”CreateUser”;
requestItems[“UserName”]=”TestUser2”;
requestItems[“Password”]=”12345678”;
//requestItems[“PassHash”]=”XXXXX”;
chain.Request(requestItems,handleCreateResult,handleCreateFail);
}
function handleCreateResult(result_string)
{
alert(result_string);
}
function handleCreateFail(error_string)
{
alert(error_string);
}
</script>
上面的示例首先创建了一个 CommChainRequest 对象,该对象在 CommDeliver.js 中定义(其余 js 文件是 CommDeliver.js 所需的)。 然后定义一个名为 requestItems的映射结构,通过节点名称为“MyTestNode1”、网络密码为“password”的节点网络查询自身(用户名“TestUser1”、密码“11223344”)信息。密码项将被 CommDeliver.js 转换为 “PassHash”项。 此请求中所有数据项都是必要的。 查询通过一下函数来处理
chain.Request(items, handleQueryResult, handleQueryFail)
在该函数中,第一个参数是必需的,其余参数是可选的。
HandleQueryResult 是查询成功时的回调函数,其格式是
function HandleQueryResult(result_string, reqItems)
此处result_string 是 JSON 格式的查询结果字符串,reqItems 是可选的,是 chain.Request() 调用中 requestItems 的拷贝。
HandleQueryFail 是查询失败时的回调函数,其格式是
function HandleQueryFail(error_string, reqItems)
此处error_string 是错误描述字符串,reqItems 是可选的,是 chain.Request() 调用中 requestItems 的拷贝。
例 2. 通过Deliver转发来创建用户
<head>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/sha256.js"></script>
<script src="https://InfoChain.link/Interface/js/CommDeliver.js"></script>
</head>
<script>
function QueryUser()
{
var chain=new CommChainRequest();
var requestItems={};
requestItems[“Func”]=”QueryUser”;
requestItems[“UserName”]=”TestUser1”;
requestItems[“Password”]=”11223344”;
//requestItems[“PassHash”]=”XXXXX”;
requestItems[“NodeName”]=”MyTestNode1”;
requestItems[“NetPassword”]=”password”;
chain.Request(requestItems,HandleQueryResult,HandleQueryFail);
}
function HandleQueryResult(result_string)
{
alert(result_string);
}
function HandleQueryFail(error_string)
{
alert(error_string);
}
</script>
上面的示例首先创建一个 ChainRequest 对象,该对象在 Deliver.js 中定义。 然后定义一个映射 requestItems,通过部署的 Deliver 应用创建一个用户(用户名“TestUser2”和密码“12345678”)。
调用过程和参数定义与示例1类似,不同之处在于:
I. ChainRequest 构造函数格式为 ChainRequest(DeliverIP, DeliverPort),DeliverIP 和 DeliverPort 为可选参数,表示 Deliver App 的 IP 和端口,如果未定义,则表示 ChainRequest 对象将通过端口 4321 连接到本地主机 Deliver。
II. 如果该网站是https网站,则需要将发送到Deliver的https请求转换为http请求,以避免被浏览器拦截。 开发者可以从菜单 ”资源“>"下载" 中下载辅助 php 文件并将其部署到网站服务器。 默认情况下,ChainRequest 对象假设 ChainRequest.php 与当前网页存储在同一文件夹中,如果没有存储在该文件夹中,则需要调用 SetPhpServerFolder(phpPath) 来指定 php 的存储文件夹。
III. 不再需要在 request 中定义 NodeName 和 NetPassword,因为它们已在 Deliver 中定义。
例 3. 创建记录
<head>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/sha256.js"></script>
<script src="https://InfoChain.link/Interface/js/Deliver.js"></script>
</head>
<script>
function CreateRecord()
{
var chain=new ChainRequest(“192.168.1.146",”4330”);
//var chain=new ChainRequest();
//chain.SetPhpServerFolder("./php");
var requestItems={};
requestItems[“Func”]=”CreateRecord”;
requestItems[“UserName”]=”TestUser2”;
requestItems[“Password”]=”12345678”;
//requestItems[“PassHash”]=”XXXXX”;
requestItems[“RecordType”]=”Private”;
requestItems[“RelatedUser”]=”TestUser1”;
requestItems[“Commodity_Name”]=”BookA”;
requestItems[“Commodity_ID”]=”10458998374”;
requestItems[“Commodity_Price”]=”$30”;
requestItems[“Sell_count”]=”3”;
requestItems[“Sell_time”]=”2023-06-21 13:30:40”;
chain.Request(requestItems,handleCreateResult,handleCreateFail);
}
function handleCreateResult(result_string)
{
alert(result_string);
}
function handleCreateFail(error_string)
{
alert(error_string);
}
</script>
上例的意思是用户TestUser2创建一条私有记录,存储有人在2023-06-21 13:30:40出售了3件商品(名称BookA,ID 10458998374,价格$30)的信息。用户TestUser1与该记录有关,可以修改记录。 在上面的请求中,Func、UserName、Password(或PassHash)和RelatedUser是必填项,其余项由开发人员根据自己的业务逻辑定义和解释。
例 4. 修改记录
<head>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/sha256.js"></script>
<script src="https://InfoChain.link/Interface/js/Deliver.js"></script>
</head>
<script>
function ChangeRecord()
{
var chain=new ChainRequest(“192.168.1.146",”4330”);
//var chain=new ChainRequest();
//chain.SetPhpServerFolder("./php");
var requestItems={};
requestItems[“Func”]=”ChangeRecord”;
requestItems[“UserName”]=”TestUser1”;
requestItems[“Password”]=”11223344”;
requestItems[“ID”]=”RD_20230621133040381”;
//requestItems[“PassHash”]=”XXXXX”;
requestItems[“RecordType”]=”Private”;
requestItems[“RelatedUser”]=”TestUser2,TestUser3”;
requestItems[“Commodity_Name”]=”BookA”;
requestItems[“Commodity_ID”]=”10458998374”;
requestItems[“Commodity_Price”]=”$30”;
requestItems[“Sell_count”]=”3”;
requestItems[“Sell_time”]=”2023-06-21 13:30:40”;
requestItems[“Deliver_address”]=”AA street, no. 4”;
requestItems[“Deliver_time”]=”2023-06-23 15:10:20”;
chain.Request(requestItems,handleCreateResult,handleCreateFail);
}
function handleCreateResult(result_string)
{
alert(result_string);
}
function handleCreateFail(error_string)
{
alert(error_string);
}
</script>
上面的示例意味着TestUser1尝试更改ID为RD_20230621133040381的记录,将记录相关用户从TestUser1更改为TestUser1和TestUser3,并将项目Deliver_address和Deliver_time添加到该记录中。
©2023