UNPKG

rchain-client-api

Version:
1,101 lines (648 loc) 29.3 kB
<!-- 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&lt;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&lt;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&lt;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]&lt;[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]&lt;[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]&lt;IPar>** The names onwhich to listen - `depth` **[number][106]** - Throws **any** Error if status is not Success Returns **[Promise][109]&lt;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]&lt;[Array][113]&lt;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]&lt;[Array][113]&lt;[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 &lt; 1 or no blocks were able to be retrieved Returns **[Promise][109]&lt;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]&lt;[Array][113]&lt;[Buffer][96]>>** Returns **[Promise][109]&lt;[Array][113]&lt;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]&lt;[string][99]>** - `subs` **...[Array][113]&lt;JsonExt&lt;([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&lt;([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&lt;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&lt;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&lt;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"