在前端开发中,npm作为最流行的JavaScript包管理工具,为开发者提供了方便的途径去管理和分享自己的代码。@neo-one/client-full-common是一个比较常用的npm包,它是NEO区块链平台的客户端扩展库,可以帮助开发者更加便捷地与NEO区块链进行交互和开发。此篇文章将详细介绍该npm包的使用方法,以及如何利用它来开发一些基于NEO的区块链应用。
安装
首先,在终端中输入以下命令来安装@neo-one/client-full-common:
npm install @neo-one/client-full-common
当npm安装完成后,你可以将该包引入到你的项目中。
使用
引入该包后,你需要在代码的开头声明引用:
const { constants, Client } = require('@neo-one/client-full-common');
其中的constants
是一个包含了Neo的常用常量的JavaScript对象。Client
类则是@neo-one/client-full-common包提供的核心类,它可以帮助我们与NEO区块链进行交互。
创建Client实例
在使用Client
类之前,我们需要创建一个Client实例。Client
的构造函数如下:
const client = new Client({ network: "priv", rpcURL: "http://localhost:4000/rpc", //用你自己NEO节点的RPC URL替换该值 });
其中,network
参数标识了你要连接到的NEO网络,一般有测试网络(testnet)和生产网络(mainnet)两种。在本例中,我们连接的是私人网络(priv),因此它将会连接到我们提供的本地节点。rpcURL
参数则标识了你连接的RPC服务所在URL。你可以通过该URL来与NEO节点进行交互。
账户管理
在NEO区块链中,账户是极其重要的,它表示了用户的身份以及资产。因此,我们在使用Client
的时候,需要进行账户管理。Client
类提供了一些方法,以便我们方便地管理账户。
createAccount
首先,让我们来创建一个新的NEO账户。
const account = client.providers.memory.keystore.addAccount({ address: "ArMf8ipi5E5oi5HJG5peN6CSvB6eh2ap6P", privateKey: "L5YvWWgEAnxt5AX5e5z5bE16bzLT8MTrFNpS26oRZmSPV4YRWozn", });
上面这段代码创建了一个Mock账户,其中的私钥是经过加密的。你可以将其替换成你自己的(未加密的)私钥,以便创建真正的账户。
getAccount
在获取账户信息之前,你需要为该账户设置好解密密码。
await client.providers.memory.keystore.unlockAccount({ id: account.id, password: "password", seconds: 300, });
解密后,你就可以获取该账户的余额信息了。
const balance = await client.providers.memory.getAccount({ id: account.id, }).then((a) => a.balances[constants.NEO_ASSET_HASH]); console.log(balance);
在NEO中,资产有多种,其中NEO是代表NEO资产的特定标识符,也就是NEO的哈希值。上面的代码中,我们获取的是该账户在NEO资产上的余额。
合约
在NEO网络中,合约可以让我们开发出更复杂和灵活的应用。因此,@neo-one/client-full-common包中提供了一些方法来更方便地操作合约。
deployContract
首先,你需要将你的合约部署到NEO网络上去。
-- -------------------- ---- ------- ----- -------- - ----- -------------------------- - --------- ---- ------- --------- ----- ------------------------ -- -------------------------------- ---- ------------------ ------- ------------- ----------- -------------- ------- ----------- ----- -------- ----- ------------- --------------------------- ----- ----------- ----------- ------ ---------- ------ ------------------ ------ ---
上述代码中,我们使用putContract
方法来发布合约,该方法提供了一些参数,以便我们能够描述合约的基本信息:
contract
:合约的名称;code
:合约的字节码;abi
:合约的抽象(即ABI);params
: 用于合约的构造函数参数;returnType
:合约返回值类型;hasStorage
:是否使用合约存储;payable
:合约是否可接受支付;refundAssets
:合约解除时要还回的资产列表;from
:发布合约的账户;networkFee
:网络费用数量;systemFee
:系统手续费数量;broadcastOverride
:是否覆盖广播。
invokeContract
发布合约之后,我们就可以在NEO区块链上进行交互了。下面的代码用于调用合约中的方法。
const contract = client.contract(account.id, contract.data.scriptHash); const res = await contract.testInvoke("method", [ {name: "args0", type: "string", value: "hello"}, {name: "args1", type: "integer", value: 123}, ]); console.log(res);
上述代码中,我们使用testInvoke
方法来调用合约的方法,其中需要传入参数:
method
: 合约中的方法名;params
: 参数列表。
用于调用智能合约方法的方法还有:invoke
, invokeWithRevoking
, invokeMethod
, testInvokeRaw
等,这里不再赘述。
其他方法
此外,@neo-one/client-full-common还提供了一些其他的方法来辅助我们操作NEO账户和合约。这里简单列出几个:
sign: function(message: string, privateKey: string): string
: 用于对字符串进行签名;verify: function(message: string, signature: string, publicKey: string): boolean
: 用于验证签名的正确性;invokeScript: function(script: Buffer | string | ContractParameter[]): Promise<any>
: 用于在虚拟机中执行指定脚本。
结束语
在本篇文章中,我们对@neo-one/client-full-common这个npm包进行了深度的介绍。它为NEO区块链开发者提供了强大的API接口,可以极大地提高我们的开发效率。通过本文的学习,读者不仅可以更好地理解如何使用该包,也能够更好地理解NEO区块链的工作原理,并开发出更加复杂的区块链应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedab6db5cbfe1ea0610781