rchain-client-api
Version:
RChain client for node.js, browsers
1,101 lines (648 loc) • 29.3 kB
Markdown
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
### Table of Contents
- [RholangCrypto][2]
- [Examples][3]
- [blake2b256Hash][4]
- [Parameters][5]
- [ed25519Verify][6]
- [Parameters][7]
- [keccak256Hash][8]
- [Parameters][9]
- [sha256Hash][10]
- [Parameters][11]
- [Hex][12]
- [Bytes][13]
- [decode][14]
- [Parameters][15]
- [encode][16]
- [Parameters][17]
- [HexStr][18]
- [RegistryProxy][19]
- [callSource][20]
- [Parameters][21]
- [makeProxy][22]
- [Parameters][23]
- [sendCall][24]
- [Parameters][25]
- [RNode][26]
- [Parameters][27]
- [Examples][28]
- [createBlock][29]
- [doDeploy][30]
- [Parameters][31]
- [listenForContinuationAtName][32]
- [Parameters][33]
- [listenForDataAtName][34]
- [Parameters][35]
- [previewPrivateNames][36]
- [Parameters][37]
- [showBlock][38]
- [Parameters][39]
- [showBlocks][40]
- [Parameters][41]
- [RHOCore][42]
- [Examples][43]
- [dataToBytes][44]
- [fromIds][45]
- [Parameters][46]
- [fromJSData][47]
- [Parameters][48]
- [getIdFromUnforgeableName][49]
- [Parameters][50]
- [rhol][51]
- [Parameters][52]
- [toByteArray][53]
- [Parameters][54]
- [toJSData][55]
- [Parameters][56]
- [toRholang][57]
- [Parameters][58]
- [unforgeableWithId][59]
- [Parameters][60]
- [wrapHash][61]
- [Parameters][62]
- [Ed25519keyPair][63]
- [Parameters][64]
- [publicKey][65]
- [signBytes][66]
- [Parameters][67]
- [signBytesHex][68]
- [Parameters][69]
- [signText][70]
- [Parameters][71]
- [signTextHex][72]
- [Parameters][73]
- [REV][74]
- [Examples][75]
- [RevAddress][76]
- [fromPublicKey][77]
- [Parameters][78]
- [parse][79]
- [Parameters][80]
- [SignDeployment][81]
- [sign][82]
- [Parameters][83]
- [verify][84]
- [Parameters][85]
## RholangCrypto
[src/signing.js:179-179][86]
Cryptographic functions from Rholang
refs:
- [RChain Cryptography Specification][cspec] May 2018
- [rholang/examples/tut-hash-functions.rho][htut] Aug 2018
- [rholang/examples/tut-verify-channel.md][vtut] Aug 2018
[cspec]: https://rchain.atlassian.net/wiki/spaces/CORE/pages/112721930/Cryptography+Specification
[htut]: https://github.com/rchain/rchain/blob/a582f94/rholang/examples/tut-hash-functions.rho
[vtut]: https://github.com/rchain/rchain/blob/3c64ca3/rholang/examples/tut-verify-channel.md
See also [RHOCore.wrapHash][87]
### Examples
```javascript
// Suppose we have Nathan Hale's public key:
const { RholangCrypto, Hex } = require('rchain-api');
const halePub = Hex.decode(
'd759793bbc13a2819a827c76adb6fba8a49aee007f49f2d0992d99b825ad2c48');
// And we are presented with a document that he purportedly signed:
const doc = 'I regret that I have but one life to live for my country.';
const sig1 = Hex.decode(
'af42db4ae7a23ee182f7aabc3a73fa89834bc0daefab94d0f3e28c508557c3d3' +
'f06c67c28ebd2768ffa0b320330ec5089a9ae7519534fe70e9d06145d8caf40c');
// Signatures are conventionally computed over a document's hash.
// In this case, we happen to know it's a Blake2b 256 bit hash:
const digest = RholangCrypto.blake2b256Hash(Buffer.from(doc));
// Indeed, the signature is valid.
assert(RholangCrypto.ed25519Verify(digest, sig1, halePub));
// If the signature is altered even slightly, validation fails:
const sig2 = sig1;
sig2[0] = 123;
assert(!RholangCrypto.ed25519Verify(digest, sig2, halePub));
```
### blake2b256Hash
[src/signing.js:134-138][88]
Blake2b 256 bit cryptographic hash function
#### Parameters
- `input` **[Uint8Array][89]** any number of bytes
Returns **[Uint8Array][89]** 256 bit (32 byte) hash
### ed25519Verify
[src/signing.js:90-96][90]
Verify ed25519 signature
#### Parameters
- `message` **[Uint8Array][89]** any number of bytes (TODO: test!)
- `sig` **[Uint8Array][89]** 64 byte ed25519 signature over message
- `publicKey` **[Uint8Array][89]** 32 byte ed25519 public key
Returns **[boolean][91]** indicates whether the signature is valid
### keccak256Hash
[src/signing.js:121-123][92]
Keccak 256 bit cryptographic hash function (aka SHA-3)
#### Parameters
- `input` **[Uint8Array][89]** any number of bytes
Returns **[Uint8Array][89]** 256 bit (32 byte) hash
### sha256Hash
[src/signing.js:107-111][93]
SHA-2 256 bit cryptographic hash function
#### Parameters
- `input` **[Uint8Array][89]** any number of bytes
Returns **[Uint8Array][89]** 256 bit (32 byte) hash
## Hex
[index.js:133-133][94]
Hex (base16) encoding and decoding
### Bytes
[src/hex.js:31-33][95]
A byte sequence
Type: ([Uint8Array][89] \| [Buffer][96])
### decode
[src/hex.js:46-48][97]
Decode hex string to bytes
#### Parameters
- `hex` **HexStr<T>**
Returns **Bytes**
### encode
[src/hex.js:31-33][98]
Encode bytes as hex string
#### Parameters
- `bytes` **T**
Returns **[string][99]**
### HexStr
[src/hex.js:31-33][100]
Hex (base16) encoding of a Bytes type
Type: [string][99]
## RegistryProxy
[index.js:110-110][101]
Proxy method calls to registered RChain channels.
### callSource
[src/proxy.js:194-194][102]
Make a rholang term for looking up a target and calling a method.
#### Parameters
- `msg`
- `opts`
- `opts.unary` : For better compositionality, JS args are combined into one
list arg on the rholang side.
### makeProxy
[src/proxy.js:69-81][103]
Make an object that proxies method calls to registered RChain
channels.
For rholang calling conventions, see `callSource`.
#### Parameters
- `target` **[URL][104]** : URI where channel is registered.
- `deployer` **[Uint8Array][89]**
- `payFor` **PayFor<IDeployData>**
- `opts` **ProxyOpts**
- `opts.rnode` : access to RChain node via gRPC
- `opts.clock` : access to millisecond-resolution clock.
- `opts.delay` : an optional async function to call between sending
a call and listening for the response.
- `opts.unary` : whether to use unary calling conventions.
- `opts.predeclare` : names to pre-declare after `return`
- `deployData` : as in doDeploy (though term is ignored and replaced)
Returns **Receiver**
### sendCall
[src/proxy.js:100-135][105]
Call a method on a registered RChain channel.
For rholang calling conventions, see `callSource`.
#### Parameters
- `$0` **any**
- `$0.target`
- `$0.method`
- `$0.args`
- `timestamp` **[number][106]**
- `deployer` **[Uint8Array][89]**
- `payFor` **PayFor<IDeployData>**
- `opts` **SendOpts**
- `opts.rnode` : access to RChain node via gRPC
- `opts.delay` : an optional async function to call between sending
a call and listening for the response.
- `opts.unary` : whether to use unary calling conventions.
- `target` : URI where channel is registered.
- `deployData` : as in doDeploy (though term is ignored and replaced)
## RNode
[src/rnodeAPI.js:106-382][107]
RChain node API client
Methods are asynchronous; they return promises. Where
CasperMessage.proto specifies an Either, this API
resolves the promise on success or rejects it on failure.
The promise may also reject for the usual gRPC reasons such as
`UNAVAILABLE: Connect Failed`.
Refs:
- [Node API Specification][nodeapi] May 2018
- [CasperMessage.proto][capi] v0.9.1 bf1b2c6 Mar 28, 2019 and dependencies such as
- [RhoTypes.proto][rapi]
- [RChain Protocol Documentation][apidoc]
[capi]: https://github.com/rchain/rchain/blob/bf1b2c6/models/src/main/protobuf/CasperMessage.proto
[rapi]: https://github.com/rchain/rchain/blob/bf1b2c6/models/src/main/protobuf/RhoTypes.proto
[apidoc]: https://github.com/rchain/rchain/blob/dev/docs/rnode-api/index.md
[nodeapi]: https://rchain.atlassian.net/wiki/spaces/CORE/pages/392462355/Node+API+Specification
### Parameters
- `grpc` **GRPCAccess** access make gRPC network calls
- `endPoint` **{host: [string][99], port: [number][106]}** rnode gRPC service
### Examples
```javascript
// Get current block info
const { RNode, REV, Ed25519keyPair, Hex } = require('rchain-api');
const grpc = require('grpc');
const rnode = RNode(grpc, { host: 'localhost', port: 40401 });
rnode.showBlocks().then((blocks) => { assert.ok(blocks[0].blockHash); });
// Deploy a simple Rholang process, given a key to authorize payment.
const term = '@"world"!("Hello!")';
const myKey = Ed25519keyPair(Hex.decode('11'.repeat(32)));
const timestamp = new Date('2019-04-12T17:59:29.274Z').valueOf();
const info = REV.SignDeployment.sign(myKey, { timestamp, term, phloLimit: 10000, phloPrice: 1 });
rnode.doDeploy(info, true).then((message) => { assert(message.startsWith('Success')); });
```
Returns **IRNode** a thin wrapper around a gRPC client stub
### createBlock
[src/rnodeAPI.js:190-193][108]
Creates a block on your node
Returns **[Promise][109]<[string][99]>** A promise for response message
### doDeploy
[src/rnodeAPI.js:166-182][110]
Deploys a rholang term to a node
#### Parameters
- `deployData` **IDeployData** a DeployData (cf CasperMessage.proto)
- `deployData.deployer` public key
- `deployData.term` A string of rholang code (for example @"world"!("Hello!") )
- `deployData.timestamp` millisecond timestamp
e.g. new Date().valueOf()
- `deployData.sig` signature of (hash(term) + timestamp) using private key
- `deployData.sigAlgorithm` name of the algorithm used to sign
- `deployData.phloLimit`
- `deployData.phloPrice`
- `deployData.validAfterBlockNumber` ???ISSUE???
- `autoCreateBlock` **[boolean][91]** automatically create a new block after deploy transaction success
- Throws **[Error][111]** Could not deploy, casper instance was not available yet.
- Throws **[Error][111]** Missing / invalid / wrong size signature
Returns **[Promise][109]<[string][99]>** A promise for message
### listenForContinuationAtName
[src/rnodeAPI.js:314-325][112]
Listen for a continuation at an individual name or
JOINed set of names in the tuplespace
#### Parameters
- `pars` **[Array][113]<IPar>** The names onwhich to listen
- `depth` **[number][106]**
- Throws **any** Error if status is not Success
Returns **[Promise][109]<ListeningNameContinuationResponse>** promise for DataWithBlockInfo
### listenForDataAtName
[src/rnodeAPI.js:253-269][114]
Listen for data at a name in the RChain tuple-space.
#### Parameters
- `par` **IPar** : JSON-ish Par data. See protobuf/RhoTypes.proto
- `depth` **[number][106]** (optional, default `1`)
- `blockDepth` : Number of blocks to look back in for the name to listen on
- Throws **any** Error if status is not Success
Returns **[Promise][109]<[Array][113]<DataWithBlockInfo>>** : promise for DataWithBlockInfo\[]
### previewPrivateNames
[src/rnodeAPI.js:132-141][115]
Ask rnode to compute ids of top level private names, given deploy parameters.
#### Parameters
- `d` **[Object][116]**
- `d.user` **[Uint8Array][89]** public key as in `deployer` in `doDeploy`
- `d.timestamp` **[number][106]** timestamp (ms) as in doDeploy
- `nameQty` **[number][106]** how many names to preview? (max: 1024)
Returns **[Promise][109]<[Array][113]<[Buffer][96]>>** a byte Buffer for each id
### showBlock
[src/rnodeAPI.js:336-345][117]
Retrieve a block with the tuplespace for a specific block hash
#### Parameters
- `blockHash` **[string][99]** : String of the hash for the block being requested
- Throws **any** Error if the hash is blank or does not correspond to an existing block
Returns **any** BlockInfo structure that will include all metadata and also includes Tuplespace
### showBlocks
[src/rnodeAPI.js:357-367][118]
Retrieve the block summary for a series of blocks starting with the most recent,
including the number of blocks specified by the block_depth
#### Parameters
- `blockDepth` **[number][106]** : Number indicating the number of blocks to retrieve
- Throws **any** Error if blockDepth < 1 or no blocks were able to be retrieved
Returns **[Promise][109]<BlockInfoWithoutTuplespace>** List of BlockInfoWithoutTuplespace structures for each block retrieved
## RHOCore
[index.js:49-49][119]
Exchanging data between Rholang and JavaScript
RChain uses gRPC and protobuf for its network
protocol. [RhoTypes.proto][rapi] gives the protobuf messages for
Rholang. The main one is `Par`.
The RHOCore mapping here is derived from Currin et. al but uses a
differet mapping for object properties and includes more ground
rholang types.
**ISSUE**: Document support for unforgeable names.
Refs:
- [Mobile process calculi for programming the blockchain][1]
Currin, Denman, Eykholt, Meredith Dec 2016
- [RhoTypes.proto][rapi] v0.9.1 bf1b2c6 Mar 28, 2019
[1]: https://mobile-process-calculi-for-programming-the-new-blockchain.readthedocs.io/en/latest/enter-the-blockchain.html#from-data-storage-to-block-storage-in-the-rchain-model
[rapi]: https://github.com/rchain/rchain/blob/bf1b2c6/models/src/main/protobuf/RhoTypes.proto
### Examples
JSON to rholang and back
```javascript
const { RHOCore, RhoTypes } = require('rchain-api');
const data = [true, 1, 'abc', null, [1, 2, 3]];
const rhoProto = RHOCore.fromJSData(data);
RhoTypes.Par.verify(rhoProto);
assert.deepEqual(RHOCore.toJSData(rhoProto), data);
assert.equal(RHOCore.toRholang(rhoProto),
'[true, 1, "abc", Nil, [1, 2, 3]]');
```
Uri and ByteArray
```javascript
const { URL } = require('url');
const { RHOCore, Hex } = require('rchain-api');
const data = [new URL('rho:id:123'), Hex.decode('deadbeef')];
const rhoProto = RHOCore.fromJSData(data);
assert.deepEqual(RHOCore.toJSData(rhoProto), data);
assert.equal(RHOCore.toRholang(rhoProto),
'[`rho:id:123`, "deadbeef".hexToBytes()]');
```
### dataToBytes
[src/RHOCore.js:111-111][120]
### fromIds
[src/RHOCore.js:91-94][121]
Turn unforgeable names from raw bytes to protobuf Par shape
#### Parameters
- `idsP` **[Promise][109]<[Array][113]<[Buffer][96]>>**
Returns **[Promise][109]<[Array][113]<IPar>>**
### fromJSData
[src/RHOCore.js:27-82][122]
Build Rholang expression from Javascript data.
This is the inverse of `toJSData`.
#### Parameters
- `data` **any** : number, string, array, etc.; see toJSData for details.
Returns **any** : A rholang term in Protobuf's JSON representation,
i.e. `IPar` derived from RhoTypes.proto.
### getIdFromUnforgeableName
[src/RHOCore.js:343-348][123]
Convert the ack channel into a HEX-formatted unforgeable name
#### Parameters
- `par` **IPar** : JSON-ish Par data: [https://github.com/rchain/rchain/blob/master/models/src/main/protobuf/RhoTypes.proto][124]
- Throws **any** Error if the Par does not represent an unforgeable name
Returns **[string][99]** HEX-formatted string of unforgeable name's Id
### rhol
[src/RHOCore.js:357-367][125]
Template tag for RHOCore interpolation
#### Parameters
- `template` **[Array][113]<[string][99]>**
- `subs` **...[Array][113]<JsonExt<([URL][104] | GPrivate)>>**
### toByteArray
[src/RHOCore.js:102-105][126]
Turns a rholang term into a byte-array compatible with Rholang
#### Parameters
- `termObj` **IPar**
Returns **[Uint8Array][89]**
### toJSData
[src/RHOCore.js:181-245][127]
Converts an RHOCore object back to JavaScript data
#### Parameters
- `par` **IPar** A RHOCore representation of a Rholang term
Returns **JsonExt<([URL][104] | GPrivate)>** JSON-serializable data
### toRholang
[src/RHOCore.js:258-311][128]
Converts an RHOCore object into Rholang source form
#### Parameters
- `par` **IPar** A RHOCore representation of a Rholang term
Returns **[string][99]** A rholang stringISSUE: Use intersection types to constrain par param further than IPar?
### unforgeableWithId
[src/RHOCore.js:319-322][129]
Get printable form of unforgeable name, given id.
#### Parameters
- `id` **[Uint8Array][89]**
### wrapHash
[src/RHOCore.js:127-127][130]
#### Parameters
- `jsData` : JS Data compatible with Rholang, used to compute the hash
- Throws **any** Error if the js_data contains a non-Rholang data structure
Returns **any** HEX-formatted string representing the computed hash
## Ed25519keyPair
[src/signing.js:38-75][131]
Build key pair from seed.
### Parameters
- `seed` **PrivateKey** 32 bytes, as from crypto.randombytes(32)
### publicKey
[src/signing.js:70-70][132]
ISSUE: if the caller wants the bytes, we go bytes -> hex -> bytes
Returns **HexStr<PublicKey>**
### signBytes
[src/signing.js:46-48][133]
#### Parameters
- `bytes` **[Uint8Array][89]**
Returns **Signature**
### signBytesHex
[src/signing.js:56-56][134]
#### Parameters
- `bs` **[Uint8Array][89]**
Returns **HexStr<Signature>**
### signText
[src/signing.js:60-60][135]
#### Parameters
- `text` **[string][99]**
Returns **Signature**
### signTextHex
[src/signing.js:64-64][136]
#### Parameters
- `text` **[string][99]**
Returns **HexStr<Signature>**
## REV
[index.js:104-104][137]
REV transaction, vault support
Refs:
- [REV Vault][vault] Feb 2019
[vault]: https://rchain.atlassian.net/wiki/spaces/CORE/pages/652640311/Wallet+proposal
### Examples
```javascript
// Suppose Alice generates a key pair.
const { REV, Ed25519keyPair, Hex } = require('rchain-api');
const aliceKey = Ed25519keyPair(Hex.decode('11'.repeat(32)));
const alicePub = aliceKey.publicKey();
assert.equal(alicePub, 'd04ab232742bb4ab3a1368bd4615e4e6d0224ab71a016baf8520a332c9778737');
// She can then share her REV address.
const aliceAddr = REV.RevAddress.fromPublicKey(Hex.decode(alicePub));
assert.equal(aliceAddr.toString(), '11112cFcjtrjwn7qCDvTLMu5jEvMSBN2qT1sBwQxDP9AyQCVi26xKZ');
// She can also sign deployments:
const term = '@"world"!("Hello!")';
const timestamp = new Date('2019-04-12T17:59:29.274Z').valueOf();
const info = REV.SignDeployment.sign(aliceKey, { timestamp, term });
assert.deepEqual(info.deployer, Hex.decode(alicePub));
assert.equal(Hex.encode(info.sig).slice(0, 16), 'ebc47a0a923b7feb');
assert(REV.SignDeployment.verify(info));
```
```javascript
// We can check a REV address before deploying any code.
assert.throws(() => {
REV.RevAddress.parse('123');
});
```
### RevAddress
[src/revAddress.js:38-103][138]
A RevAddress refers to a REV vault.
Use `toString()` to get base58 form.
Refs:
- [RevAddress.scala][139]
- [AddressTools.scala][140]
#### fromPublicKey
[src/revAddress.js:46-61][141]
Compute REV Address from public key
##### Parameters
- `pk` **[Uint8Array][89]** ed25519 public key
Returns **IRevAddress**
#### parse
[src/revAddress.js:69-100][142]
Parse REV Address
##### Parameters
- `address` **[string][99]**
- Throws **any** Error on ill-formed address
Returns **IRevAddress**
### SignDeployment
[src/rnodeAPI.js:418-451][143]
a port of [casper/SignDeployment.scala][144]
ISSUE: only ed25519 is supported.
#### sign
[src/rnodeAPI.js:430-436][145]
##### Parameters
- `key` **KeyPair**
- `deployData` **DeployData**
Returns **DeployData**
#### verify
[src/rnodeAPI.js:441-448][146]
##### Parameters
- `deployData` **DeployData**
Returns **[boolean][91]**
[2]: #rholangcrypto
[3]: #examples
[4]: #blake2b256hash
[5]: #parameters
[6]: #ed25519verify
[7]: #parameters-1
[8]: #keccak256hash
[9]: #parameters-2
[10]: #sha256hash
[11]: #parameters-3
[12]: #hex
[13]: #bytes
[14]: #decode
[15]: #parameters-4
[16]: #encode
[17]: #parameters-5
[18]: #hexstr
[19]: #registryproxy
[20]: #callsource
[21]: #parameters-6
[22]: #makeproxy
[23]: #parameters-7
[24]: #sendcall
[25]: #parameters-8
[26]: #rnode
[27]: #parameters-9
[28]: #examples-1
[29]: #createblock
[30]: #dodeploy
[31]: #parameters-10
[32]: #listenforcontinuationatname
[33]: #parameters-11
[34]: #listenfordataatname
[35]: #parameters-12
[36]: #previewprivatenames
[37]: #parameters-13
[38]: #showblock
[39]: #parameters-14
[40]: #showblocks
[41]: #parameters-15
[42]: #rhocore
[43]: #examples-2
[44]: #datatobytes
[45]: #fromids
[46]: #parameters-16
[47]: #fromjsdata
[48]: #parameters-17
[49]: #getidfromunforgeablename
[50]: #parameters-18
[51]: #rhol
[52]: #parameters-19
[53]: #tobytearray
[54]: #parameters-20
[55]: #tojsdata
[56]: #parameters-21
[57]: #torholang
[58]: #parameters-22
[59]: #unforgeablewithid
[60]: #parameters-23
[61]: #wraphash
[62]: #parameters-24
[63]: #ed25519keypair
[64]: #parameters-25
[65]: #publickey
[66]: #signbytes
[67]: #parameters-26
[68]: #signbyteshex
[69]: #parameters-27
[70]: #signtext
[71]: #parameters-28
[72]: #signtexthex
[73]: #parameters-29
[74]: #rev
[75]: #examples-3
[76]: #revaddress
[77]: #frompublickey
[78]: #parameters-30
[79]: #parse
[80]: #parameters-31
[81]: #signdeployment
[82]: #sign
[83]: #parameters-32
[84]: #verify
[85]: #parameters-33
[86]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/signing.js#L179-L179 "Source code on GitHub"
[87]: #rhocorewraphash
[88]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/signing.js#L134-L138 "Source code on GitHub"
[89]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array
[90]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/signing.js#L90-L96 "Source code on GitHub"
[91]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
[92]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/signing.js#L121-L123 "Source code on GitHub"
[93]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/signing.js#L107-L111 "Source code on GitHub"
[94]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/index.js#L133-L133 "Source code on GitHub"
[95]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/hex.js#L10-L16 "Source code on GitHub"
[96]: https://nodejs.org/api/buffer.html
[97]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/hex.js#L46-L48 "Source code on GitHub"
[98]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/hex.js#L31-L33 "Source code on GitHub"
[99]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
[100]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/hex.js#L18-L24 "Source code on GitHub"
[101]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/index.js#L110-L110 "Source code on GitHub"
[102]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/proxy.js#L194-L194 "Source code on GitHub"
[103]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/proxy.js#L69-L81 "Source code on GitHub"
[104]: https://developer.mozilla.org/docs/Web/API/URL/URL
[105]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/proxy.js#L100-L135 "Source code on GitHub"
[106]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
[107]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/rnodeAPI.js#L106-L382 "Source code on GitHub"
[108]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/rnodeAPI.js#L190-L193 "Source code on GitHub"
[109]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise
[110]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/rnodeAPI.js#L166-L182 "Source code on GitHub"
[111]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Error
[112]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/rnodeAPI.js#L314-L325 "Source code on GitHub"
[113]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
[114]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/rnodeAPI.js#L253-L269 "Source code on GitHub"
[115]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/rnodeAPI.js#L132-L141 "Source code on GitHub"
[116]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
[117]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/rnodeAPI.js#L336-L345 "Source code on GitHub"
[118]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/rnodeAPI.js#L357-L367 "Source code on GitHub"
[119]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/index.js#L49-L49 "Source code on GitHub"
[120]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/RHOCore.js#L111-L111 "Source code on GitHub"
[121]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/RHOCore.js#L91-L94 "Source code on GitHub"
[122]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/RHOCore.js#L27-L82 "Source code on GitHub"
[123]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/RHOCore.js#L343-L348 "Source code on GitHub"
[124]: https://github.com/rchain/rchain/blob/master/models/src/main/protobuf/RhoTypes.proto
[125]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/RHOCore.js#L357-L367 "Source code on GitHub"
[126]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/RHOCore.js#L102-L105 "Source code on GitHub"
[127]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/RHOCore.js#L181-L245 "Source code on GitHub"
[128]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/RHOCore.js#L258-L311 "Source code on GitHub"
[129]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/RHOCore.js#L319-L322 "Source code on GitHub"
[130]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/RHOCore.js#L127-L127 "Source code on GitHub"
[131]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/signing.js#L38-L75 "Source code on GitHub"
[132]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/signing.js#L70-L70 "Source code on GitHub"
[133]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/signing.js#L46-L48 "Source code on GitHub"
[134]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/signing.js#L56-L56 "Source code on GitHub"
[135]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/signing.js#L60-L60 "Source code on GitHub"
[136]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/signing.js#L64-L64 "Source code on GitHub"
[137]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/index.js#L104-L104 "Source code on GitHub"
[138]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/revAddress.js#L38-L103 "Source code on GitHub"
[139]: https://github.com/rchain/rchain/blob/9ae5825/rholang/src/main/scala/coop/rchain/rholang/interpreter/util/RevAddress.scala
[140]: https://github.com/rchain/rchain/blob/9ae5825/rholang/src/main/scala/coop/rchain/rholang/interpreter/util/AddressTools.scala
[141]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/revAddress.js#L46-L61 "Source code on GitHub"
[142]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/revAddress.js#L69-L100 "Source code on GitHub"
[143]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/rnodeAPI.js#L418-L451 "Source code on GitHub"
[144]: https://github.com/rchain/rchain/blob/9ae5825/casper/src/main/scala/coop/rchain/casper/SignDeployment.scala
[145]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/rnodeAPI.js#L430-L436 "Source code on GitHub"
[146]: https://git@github.com/:dckc/RChain-API/blob/5878af2955efa512088affdac6411179701098b9/src/rnodeAPI.js#L441-L448 "Source code on GitHub"