@keetanetwork/keetanet-client 0.14.2 → 0.14.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/README.md +4 -0
  2. package/api/node.d.ts +1 -0
  3. package/benchmarking/test.d.ts +4 -0
  4. package/client/index-browser.d.ts +23 -1
  5. package/client/index-browser.js +440 -148
  6. package/client/index.d.ts +23 -1
  7. package/client/index.js +434 -111
  8. package/docs/GETTING-STARTED.md +361 -0
  9. package/docs/assets/hierarchy.js +1 -1
  10. package/docs/assets/navigation.js +1 -1
  11. package/docs/assets/search.js +1 -1
  12. package/docs/classes/KeetaNetSDK.Client.html +8 -4
  13. package/docs/classes/KeetaNetSDK.Referenced.BaseSet.html +1 -1
  14. package/docs/classes/KeetaNetSDK.Referenced.BaseVoteBuilder.html +1 -1
  15. package/docs/classes/KeetaNetSDK.Referenced.BlockHash.html +1 -1
  16. package/docs/classes/KeetaNetSDK.Referenced.BlockOperation.html +1 -1
  17. package/docs/classes/KeetaNetSDK.Referenced.BlockOperationCREATE_IDENTIFIER.html +1 -1
  18. package/docs/classes/KeetaNetSDK.Referenced.BlockOperationMANAGE_CERTIFICATE.html +1 -1
  19. package/docs/classes/KeetaNetSDK.Referenced.BlockOperationMODIFY_PERMISSIONS.html +1 -1
  20. package/docs/classes/KeetaNetSDK.Referenced.BlockOperationRECEIVE.html +1 -1
  21. package/docs/classes/KeetaNetSDK.Referenced.BlockOperationSEND.html +1 -1
  22. package/docs/classes/KeetaNetSDK.Referenced.BlockOperationSET_INFO.html +1 -1
  23. package/docs/classes/KeetaNetSDK.Referenced.BlockOperationSET_REP.html +1 -1
  24. package/docs/classes/KeetaNetSDK.Referenced.BlockOperationTOKEN_ADMIN_MODIFY_BALANCE.html +1 -1
  25. package/docs/classes/KeetaNetSDK.Referenced.BlockOperationTOKEN_ADMIN_SUPPLY.html +1 -1
  26. package/docs/classes/KeetaNetSDK.Referenced.CertificateHash.html +1 -1
  27. package/docs/classes/KeetaNetSDK.Referenced.ECDSAKeyPair.html +1 -1
  28. package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256K1KeyPair.html +1 -1
  29. package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256K1PrivateKey.html +1 -1
  30. package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256K1PublicKey.html +1 -1
  31. package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256K1Signature.html +1 -1
  32. package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256R1KeyPair.html +1 -1
  33. package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256R1PrivateKey.html +1 -1
  34. package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256R1PublicKey.html +1 -1
  35. package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256R1Signature.html +1 -1
  36. package/docs/classes/KeetaNetSDK.Referenced.ED25519KeyPair.html +1 -1
  37. package/docs/classes/KeetaNetSDK.Referenced.ED25519PrivateKey.html +1 -1
  38. package/docs/classes/KeetaNetSDK.Referenced.ED25519PublicKey.html +1 -1
  39. package/docs/classes/KeetaNetSDK.Referenced.ED25519Signature.html +1 -1
  40. package/docs/classes/KeetaNetSDK.Referenced.ExternalKeyPair.html +1 -1
  41. package/docs/classes/KeetaNetSDK.Referenced.ExternalSet.html +1 -1
  42. package/docs/classes/KeetaNetSDK.Referenced.IdentifierKey.html +1 -1
  43. package/docs/classes/KeetaNetSDK.Referenced.IdentifierKeyPair.html +1 -1
  44. package/docs/classes/KeetaNetSDK.Referenced.KeetaNetError.html +8 -5
  45. package/docs/classes/KeetaNetSDK.Referenced.KeetaNetErrorBase.html +6 -0
  46. package/docs/classes/KeetaNetSDK.Referenced.KeetaNetLedgerError.html +9 -0
  47. package/docs/classes/KeetaNetSDK.Referenced.KeetaNetLedgerVoteError.html +9 -0
  48. package/docs/classes/KeetaNetSDK.Referenced.KeyInterface.html +1 -1
  49. package/docs/classes/KeetaNetSDK.Referenced.KeyStorage.html +1 -1
  50. package/docs/classes/KeetaNetSDK.Referenced.Ledger.html +3 -2
  51. package/docs/classes/KeetaNetSDK.Referenced.LedgerAtomicInterface.html +2 -1
  52. package/docs/classes/KeetaNetSDK.Referenced.PermissionSetHolder.html +1 -1
  53. package/docs/classes/KeetaNetSDK.Referenced.PossiblyExpiredVote.html +1 -1
  54. package/docs/classes/KeetaNetSDK.Referenced.SignatureStorage.html +1 -1
  55. package/docs/classes/KeetaNetSDK.Referenced.Stats.html +1 -1
  56. package/docs/classes/KeetaNetSDK.Referenced.StatsPending.html +1 -1
  57. package/docs/classes/KeetaNetSDK.Referenced.Vote.html +1 -1
  58. package/docs/classes/KeetaNetSDK.Referenced.VoteBlockBundle.html +1 -1
  59. package/docs/classes/KeetaNetSDK.Referenced.VoteBlockHash.html +1 -1
  60. package/docs/classes/KeetaNetSDK.Referenced.VoteBuilder.html +1 -1
  61. package/docs/classes/KeetaNetSDK.Referenced.VoteHash.html +1 -1
  62. package/docs/classes/KeetaNetSDK.Referenced.VoteLikeBase.html +1 -1
  63. package/docs/classes/KeetaNetSDK.Referenced.VoteQuote.html +1 -1
  64. package/docs/classes/KeetaNetSDK.Referenced.VoteQuoteBuilder.html +1 -1
  65. package/docs/classes/KeetaNetSDK.Referenced.VoteStaple.html +1 -1
  66. package/docs/classes/KeetaNetSDK.Referenced.VoteStapleHash.html +1 -1
  67. package/docs/classes/KeetaNetSDK.Referenced.src_lib_utils_buffer.BufferStorage.html +1 -1
  68. package/docs/classes/KeetaNetSDK.UserClient.html +11 -6
  69. package/docs/documents/GETTING-STARTED.html +3 -2
  70. package/docs/hierarchy.html +1 -1
  71. package/docs/index.html +2 -1
  72. package/docs/interfaces/KeetaNetSDK.Referenced.ACLEntry.html +1 -1
  73. package/docs/interfaces/KeetaNetSDK.Referenced.ACLUpdate.html +1 -1
  74. package/docs/interfaces/KeetaNetSDK.Referenced.ASN1ExplicitContextTag.html +1 -1
  75. package/docs/interfaces/KeetaNetSDK.Referenced.ASN1ImplicitContextTag.html +1 -1
  76. package/docs/interfaces/KeetaNetSDK.Referenced.ASN1Object.html +1 -1
  77. package/docs/interfaces/KeetaNetSDK.Referenced.BaseExternalKeyPairFunctions.html +1 -1
  78. package/docs/interfaces/KeetaNetSDK.Referenced.BaseGenerationConfig.html +3 -2
  79. package/docs/interfaces/KeetaNetSDK.Referenced.BaseIdentifierCreateArguments.html +1 -1
  80. package/docs/interfaces/KeetaNetSDK.Referenced.BaseTokenInfo.html +4 -0
  81. package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperation.html +1 -1
  82. package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationCREATE_IDENTIFIER.html +1 -1
  83. package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationMANAGE_CERTIFICATE.html +1 -1
  84. package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationMANAGE_CERTIFICATESerializable.html +1 -1
  85. package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationMODIFY_PERMISSIONS.html +1 -1
  86. package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationRECEIVE.html +1 -1
  87. package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationSEND.html +1 -1
  88. package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationSET_INFO.html +1 -1
  89. package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationSET_REP.html +1 -1
  90. package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationTOKEN_ADMIN_MODIFY_BALANCE.html +1 -1
  91. package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationTOKEN_ADMIN_SUPPLY.html +1 -1
  92. package/docs/interfaces/KeetaNetSDK.Referenced.BlockV1Canonical.html +1 -1
  93. package/docs/interfaces/KeetaNetSDK.Referenced.BlockV2Canonical.html +1 -1
  94. package/docs/interfaces/KeetaNetSDK.Referenced.Constructor.html +1 -1
  95. package/docs/interfaces/KeetaNetSDK.Referenced.DisposableTimingHandle.html +1 -1
  96. package/docs/interfaces/KeetaNetSDK.Referenced.ExternalKeyPairFunctionsNoEncryption.html +1 -1
  97. package/docs/interfaces/KeetaNetSDK.Referenced.ExternalKeyPairFunctionsSupportsEncryption.html +1 -1
  98. package/docs/interfaces/KeetaNetSDK.Referenced.InitialConfigSupply.html +3 -2
  99. package/docs/interfaces/KeetaNetSDK.Referenced.InstanceSet.html +1 -1
  100. package/docs/interfaces/KeetaNetSDK.Referenced.KVGenericOptionsType.html +1 -1
  101. package/docs/interfaces/KeetaNetSDK.Referenced.KVSetOptionsType.html +1 -1
  102. package/docs/interfaces/KeetaNetSDK.Referenced.LedgerStorageAPI.html +5 -2
  103. package/docs/interfaces/KeetaNetSDK.Referenced.ModifyTokenBalanceEntry.html +1 -1
  104. package/docs/interfaces/KeetaNetSDK.Referenced.MultiSigIdentifierCreateArguments.html +1 -1
  105. package/docs/interfaces/KeetaNetSDK.Referenced.MultisigConfig.html +1 -1
  106. package/docs/interfaces/KeetaNetSDK.Referenced.NumericValueEntry.html +1 -1
  107. package/docs/interfaces/KeetaNetSDK.Referenced.P2PPeerBase.html +1 -1
  108. package/docs/interfaces/KeetaNetSDK.Referenced.P2PPeerListener.html +1 -1
  109. package/docs/interfaces/KeetaNetSDK.Referenced.P2PPeerRepBase.html +1 -1
  110. package/docs/interfaces/KeetaNetSDK.Referenced.PublicKeyStorage.html +1 -1
  111. package/docs/interfaces/KeetaNetSDK.Referenced.RequestTokenReceiveEntry.html +1 -1
  112. package/docs/interfaces/KeetaNetSDK.Referenced.TokenNumericEntry.html +1 -1
  113. package/docs/interfaces/KeetaNetSDK.Referenced.UserClientConfig.html +1 -1
  114. package/docs/interfaces/KeetaNetSDK.Referenced.UserClientOptions.html +1 -1
  115. package/docs/interfaces/KeetaNetSDK.Referenced.WithIsInstance.html +1 -1
  116. package/docs/interfaces/KeetaNetSDK.Referenced.src_lib_utils_asn1.ASN1BitString.html +1 -1
  117. package/docs/interfaces/KeetaNetSDK.Referenced.src_lib_utils_asn1.ASN1Date.html +1 -1
  118. package/docs/interfaces/KeetaNetSDK.Referenced.src_lib_utils_asn1.ASN1OID.html +1 -1
  119. package/docs/interfaces/KeetaNetSDK.Referenced.src_lib_utils_asn1.ASN1Set.html +1 -1
  120. package/docs/interfaces/KeetaNetSDK.Referenced.src_lib_utils_asn1.ASN1String.html +1 -1
  121. package/docs/modules/KeetaNetSDK.Referenced.html +1 -1
  122. package/docs/modules/KeetaNetSDK.Referenced.src_lib_utils_initial.html +1 -1
  123. package/docs/types/KeetaNetSDK.Referenced.ErrorCode.html +1 -1
  124. package/docs/types/KeetaNetSDK.Referenced.GetAccountStateAPIResponseFormatted.html +5 -2
  125. package/docs/types/KeetaNetSDK.Referenced.GetAccountStateAPIResponseSuccess.html +3 -2
  126. package/docs/types/KeetaNetSDK.Referenced.LedgerBaseErrorCode.html +1 -0
  127. package/docs/types/KeetaNetSDK.Referenced.LedgerVoteErrorCode.html +1 -0
  128. package/docs/variables/KeetaNetSDK.Referenced.FullLedgerBaseErrorCode.html +1 -0
  129. package/docs/variables/KeetaNetSDK.Referenced.FullLedgerVoteErrorCodes.html +1 -0
  130. package/docs/variables/KeetaNetSDK.Referenced.allFullErrorCodes.html +1 -0
  131. package/lib/error/account.d.ts +6 -7
  132. package/lib/error/api.d.ts +8 -0
  133. package/lib/error/base.d.ts +16 -0
  134. package/lib/error/block.d.ts +6 -7
  135. package/lib/error/certificate.d.ts +6 -7
  136. package/lib/error/client.d.ts +6 -7
  137. package/lib/error/index.d.ts +7 -18
  138. package/lib/error/kv.d.ts +6 -7
  139. package/lib/error/ledger.d.ts +28 -8
  140. package/lib/error/permissions.d.ts +6 -7
  141. package/lib/error/vote.d.ts +6 -7
  142. package/lib/ledger/common.d.ts +9 -0
  143. package/lib/ledger/index.d.ts +23 -0
  144. package/lib/node/local.d.ts +1 -2
  145. package/lib/p2p.d.ts +1 -1
  146. package/lib/utils/initial.d.ts +6 -0
  147. package/npm-shrinkwrap.json +598 -0
  148. package/package.json +3 -2
  149. package/version.d.ts +1 -1
  150. package/docs/types/KeetaNetSDK.Referenced.AccountErrorCode.html +0 -1
  151. package/docs/types/KeetaNetSDK.Referenced.BlockErrorCode.html +0 -1
  152. package/docs/types/KeetaNetSDK.Referenced.CertificateErrorCode.html +0 -1
  153. package/docs/types/KeetaNetSDK.Referenced.ClientErrorCode.html +0 -1
  154. package/docs/types/KeetaNetSDK.Referenced.KVErrorCode.html +0 -1
  155. package/docs/types/KeetaNetSDK.Referenced.LedgerErrorCode.html +0 -1
  156. package/docs/types/KeetaNetSDK.Referenced.PermissionsErrorCode.html +0 -1
  157. package/docs/types/KeetaNetSDK.Referenced.VoteErrorCode.html +0 -1
  158. package/docs/variables/KeetaNetSDK.Referenced.AccountErrorCodes.html +0 -1
  159. package/docs/variables/KeetaNetSDK.Referenced.AccountErrorType.html +0 -1
  160. package/docs/variables/KeetaNetSDK.Referenced.BlockErrorCodes-1.html +0 -1
  161. package/docs/variables/KeetaNetSDK.Referenced.BlockErrorCodes.html +0 -1
  162. package/docs/variables/KeetaNetSDK.Referenced.BlockErrorType.html +0 -1
  163. package/docs/variables/KeetaNetSDK.Referenced.CertificateErrorType.html +0 -1
  164. package/docs/variables/KeetaNetSDK.Referenced.ClientErrorCodes.html +0 -1
  165. package/docs/variables/KeetaNetSDK.Referenced.ClientErrorType.html +0 -1
  166. package/docs/variables/KeetaNetSDK.Referenced.KVErrorCodes.html +0 -1
  167. package/docs/variables/KeetaNetSDK.Referenced.KVErrorType.html +0 -1
  168. package/docs/variables/KeetaNetSDK.Referenced.LedgerErrorCodes.html +0 -1
  169. package/docs/variables/KeetaNetSDK.Referenced.LedgerErrorType.html +0 -1
  170. package/docs/variables/KeetaNetSDK.Referenced.PermissionsErrorCodes.html +0 -1
  171. package/docs/variables/KeetaNetSDK.Referenced.PermissionsErrorType.html +0 -1
  172. package/docs/variables/KeetaNetSDK.Referenced.VoteErrorCodes.html +0 -1
  173. package/docs/variables/KeetaNetSDK.Referenced.VoteErrorType.html +0 -1
@@ -0,0 +1,361 @@
1
+ ---
2
+ Title: Getting Started
3
+ Category: Guides
4
+ ---
5
+
6
+ # KeetaNet Client SDK Getting Started
7
+
8
+ ## Documentation
9
+
10
+ See the full documentation for the KeetaNet Client JavaScript/TypeScript SDK at [https://static.test.keeta.com/docs/](https://static.test.keeta.com/docs/).
11
+
12
+ ## Installation
13
+
14
+ The KeetaNet Client JavaScript/TypeScript SDK can be loaded with:
15
+ ```bash
16
+ $ npm install @keetanetwork/keetanet-client
17
+ ```
18
+
19
+ ## Concepts
20
+ ### Accounts
21
+
22
+ {@link KeetaNetSDK.Referenced.Account | Accounts} in the KeetaNet SDK are the way in which key pairs or identifiers are
23
+ represented.
24
+
25
+ For key pairs, they securely store the private key (where applicable) and
26
+ provide operations like {@link KeetaNetSDK.Referenced.Account#sign | digital signing} and {@link KeetaNetSDK.Referenced.Account#verify | verification},
27
+ {@link KeetaNetSDK.Referenced.Account.fromSeed | key derivation from seed} and {@link KeetaNetSDK.Referenced.Account.seedFromPassphrase | passphrase}, and
28
+ {@link KeetaNetSDK.Referenced.Account#encrypt | encryption} and {@link KeetaNetSDK.Referenced.Account#decrypt | decryption} using ECIES.
29
+
30
+ For identifiers, they are used to represent the identity of a specific kind of
31
+ address, such as a Token, the Network Address, or a Storage account.
32
+
33
+ Additionally, for key pair accounts the key may be held internally or
34
+ externally using an external key provider. No particular external key provider
35
+ interface (e.g. PKCS#11) is specified but users may implement their own
36
+ provider using the {@link KeetaNetSDK.Referenced.ExternalKeyPair | ExternalKeyPair} interface.
37
+
38
+ ### Blocks
39
+
40
+ {@link KeetaNetSDK.Referenced.Block | Blocks} are used within KeetaNet to represent a collection of operations
41
+ (transactions) by an account. They contain the {@link KeetaNetSDK.Referenced.Block#account | account identifier}, the
42
+ {@link KeetaNetSDK.Referenced.Block#network | network identifier}, the {@link KeetaNetSDK.Referenced.Block#previous | previous block identifier}, an optional
43
+ {@link KeetaNetSDK.Referenced.Block#signer | signer} (if different from the account), a {@link KeetaNetSDK.Referenced.Block#date | timestamp}, and a list of
44
+ {@link KeetaNetSDK.Referenced.Block#operations | operations}.
45
+
46
+ The block is digitally signed by the signer (if present, otherwise the account)
47
+ and the signature is included in the block. The block is identified by its
48
+ {@link KeetaNetSDK.Referenced.Block#hash | hash} which is the hash of the block
49
+ not including the signature.
50
+
51
+ The KeetaNet SDK also provides a block builder method which allows the user to
52
+ create blocks in an incremental fashion. The block builder is created using the
53
+ {@link KeetaNetSDK.Referenced.BlockBuilder | BlockBuilder} class, however in
54
+ most cases a {@link KeetaNetSDK.Referenced.UserClientBuilder | UserClientBuilder}
55
+ from a {@link KeetaNetSDK.UserClient#initBuilder | UserClient} should be used
56
+ because it will handle things like getting the correct network and previous
57
+ block hash.
58
+
59
+ ### Operations
60
+
61
+ {@link KeetaNetSDK.Referenced.BlockOperation | Operations} describe the actions performed by an account on the ledger. They
62
+ are fundamentally composed of effects, which are the specific changes or
63
+ constraints performed on the ledger.
64
+
65
+ An example operation is a {@link KeetaNetSDK.Referenced.BlockOperationSEND | Send}
66
+ operation which has the effects of decrementing the balance of the sender,
67
+ incrementing the balance of the receiver, and validating that the sender's
68
+ balance does not drop below zero.
69
+
70
+ The KeetaNet SDK provides {@link KeetaNetSDK.Referenced.BlockOperation | a number of operations}
71
+ which are used to perform actions on the ledger.
72
+
73
+ ### Votes
74
+
75
+ {@link KeetaNetSDK.Referenced.Vote | Votes} in KeetaNet are used for consensus forming among "representatives".
76
+ Each vote is an assertion by a representative that a specific group of blocks
77
+ (identified by their hashes) are valid and conform to the rules of the
78
+ ledger of that representative.
79
+
80
+ Votes are used to form a consensus on the state of the ledger and are
81
+ aggregated by the representatives to form a "vote staple". A vote staple is
82
+ a collection of votes and the blocks which are referenced by those vote.
83
+
84
+ Votes come in two flavors: temporary and permanent. Temporary votes are
85
+ used to get initial consensus on a set of blocks. A quorum of temporary votes
86
+ can be "traded in" for permanent votes.
87
+
88
+ When a temporary vote is issued by a representative the vote and block are
89
+ stored on the representative's "side ledger", which is a non-synchronized
90
+ portion of the ledger. The client can request a copy of the block from the
91
+ representative {@link KeetaNetSDK.Client#getPendingBlock | Client.getPendingBlock}
92
+ or {@link KeetaNetSDK.UserClient#pendingBlock | UserClient.pendingBlock} method,
93
+ or the {@link KeetaNetSDK.Client#getVoteStaple | Client.getVoteStaple} method to
94
+ with the "`side`" parameter set to `side` to retrieve the vote staple from the
95
+ representative's side ledger.
96
+
97
+ Additionally, the {@link KeetaNetSDK.UserClient#recover | UserClient.recover} method
98
+ can be used to query all known representatives for side ledger vote staples
99
+ to complete any partially completed consensus rounds.
100
+
101
+ ### Vote Staples
102
+
103
+ {@link KeetaNetSDK.Referenced.VoteStaple | Vote Staples}, as discussed above, are a
104
+ collection of votes and the blocks. Every vote in a vote staple must be for the same
105
+ set of blocks in the same order.
106
+
107
+ Vote Staples are the unit of transaction in the KeetaNet network. The set of
108
+ blocks in a vote staple are applied altogether as a single atomic transaction
109
+ acting on the ledger.
110
+
111
+ ### Networks
112
+
113
+ {@link KeetaNetSDK.Referenced.src/config.networksArray | Networks} in KeetaNet
114
+ a group of representative nodes and clients which all agree to a common set of
115
+ rules and initial ledger state. There can be many different networks, such as
116
+ the "test" network, "main" network, and "dev" network. Each network has its
117
+ own set of representatives and clients.
118
+
119
+ The network is identified within each block by the {@link KeetaNetSDK.Referenced.Block#network | network identifier}
120
+ property, which is an integer.
121
+
122
+ Each network also has a {@link KeetaNetSDK.UserClient.networkAddress | Network Address},
123
+ which is a special kind of account derived from the network identifier. The
124
+ purpose of the network address is to define permissions which apply to the
125
+ network as a whole, such as the permission to create tokens, or create storage
126
+ accounts.
127
+
128
+ ### Tokens
129
+
130
+ {@link KeetaNetSDK.Referenced.AccountKeyAlgorithm.TOKEN | Tokens} in KeetaNet are a
131
+ special kind of account which is used to represent a fungible asset. Tokens can be
132
+ created using the {@link KeetaNetSDK.Referenced.BlockOperationCREATE_IDENTIFIER | Create Identifier}
133
+ method though the {@link KeetaNetSDK.Referenced.UserClientBuilder#generateIdentifier | UserClientBuilder.generateIdentifier}
134
+ method is recommended.
135
+
136
+ Each network also has a base token which is used for consensus and other
137
+ management functions. The base token can be thought of as the native currency
138
+ of the network and is derived from the network identifier.
139
+
140
+ ### Ledger
141
+
142
+ The ledger within KeetaNet refers to a couple of different things:
143
+
144
+ - The live state of accounts and their balances of tokens, as well as other attributes
145
+ - The record of how that state came to be, represented by vote staples
146
+
147
+ #### The ledger state
148
+
149
+ The ledger state is the current state of all accounts and their balances of tokens,
150
+ it can be thought of like this:
151
+
152
+ | Account | Base Token | Token 1 | Token 2 | Token 3
153
+ | ------- | ---------- | ------- | ------- | -------
154
+ | kta1 | 1 | 100 | 200 | 300
155
+ | kta2 | 5 | | 0 | 3
156
+ | kta3 | | 90 | |
157
+
158
+ Where `kta1`, `kta2`, and `kta3` are the account identifiers, and the columns
159
+ represent the balance of that account for the base token and other tokens.
160
+
161
+ #### The ledger history
162
+
163
+ The ledger history is the record of how the ledger state came to be. It is
164
+ represented by the set of vote staples which have been applied to the ledger.
165
+
166
+ This is expressed in two different ways in the KeetaNet SDK
167
+
168
+ - The {@link KeetaNetSDK.UserClient#history | UserClient.history} method which returns a list of
169
+ {@link KeetaNetSDK.Referenced.VoteStaple | vote staples} which have affected
170
+ the given account.
171
+ - The {@link KeetaNetSDK.UserClient#chain | UserClient.chain} method which returns a list of
172
+ {@link KeetaNetSDK.Referenced.Block | blocks} which have been applied for a given
173
+ account.
174
+
175
+ These two differ in that the history method returns all vote staples which
176
+ affected an account, even if they were not issued by the account -- for
177
+ example if a transfer was made to the account, the history method would return
178
+ the vote staple which included the transfer, but the chain method would not
179
+ because it was not issued by the account.
180
+
181
+ Additionally there is a method to {@link KeetaNetSDK.UserClient.filterStapleOperations | filter a list of vote staples}
182
+ to a list of operations which are relevant to a specific account. This is useful
183
+ because the list of operations in a vote staple may include changes that are uninteresting
184
+ from an account perspective.
185
+
186
+ ### Permissions
187
+
188
+ {@link KeetaNetSDK.Referenced.Permissions | Permissions} in KeetaNet are used
189
+ to allow users and operators to manage access to resources on the network.
190
+ They are used to control who can create tokens, create storage accounts, as well
191
+ as delegate permissions to other accounts.
192
+
193
+ There are two kinds of permissions:
194
+
195
+ - {@link KeetaNetSDK.Referenced.BaseSet | Base} permissions are the permissions which are
196
+ defined by the network. These are the permissions which the network representatives
197
+ will look at to grant or deny access
198
+ - {@link KeetaNetSDK.Referenced.ExternalSet | External} permissions are the permissions which
199
+ applications can define. These are the permissions which are defined by the
200
+ users of KeetaNet and the network representatives will not process them.
201
+ These are useful for applications which want to define their own permissions and in
202
+ the future may be used with Smart Contracts.
203
+
204
+ Additionally, permissions may be applied to a specific account or set as
205
+ default permissions on some the following resources:
206
+
207
+ - Network Account: `ACCESS`, `STORAGE_CREATE`, `TOKEN_ADMIN_CREATE`
208
+ - Token Accounts: `ACCESS`
209
+ - Storage Accounts: `ACCESS`, `STORAGE_CAN_HOLD`, `STORAGE_DEPOSIT`
210
+
211
+ Setting default permissions is done with the {@link KeetaNetSDK.UserClient#setInfo | UserClient.setInfo}
212
+ method. Setting permission on an account are set with the
213
+ {@link KeetaNetSDK.UserClient#updatePermissions | UserClient.updatePermissions} method.
214
+
215
+ #### Base Permissions
216
+
217
+ The base permissions are defined by the network and are used to control access
218
+ to the network. Each base permission has a {@link KeetaNetSDK.Referenced.BaseFlag | flag name}
219
+ which can be used to identify the permission. The base permissions are:
220
+
221
+ - `ACCESS` - The permission to access the resource it is granted on -- if this
222
+ permission is missing then no access to the resource is granted, this is
223
+ useful as to create deny-list or permit-list resources.
224
+ - `ADMIN` - The `ADMIN` permission allows the `principal` to perform all actions
225
+ on the resource, excluding deleting the resource and transferring ownership.
226
+ For example, administrators of Token resources can mint and burn tokens and
227
+ set the permissions of the token.
228
+ - `OWNER` - The owner permission grants all the privileges of the `ADMIN`
229
+ permission but also the ability to delete the resource and transfer
230
+ ownership. All resources have exactly 1 owner.
231
+ - `UPDATE_INFO` - The update info permission allows the `principal` to update the
232
+ information of the resource. See {@link KeetaNetSDK.UserClient#setInfo | UserClient.setInfo}
233
+ for more information on how to set the info.
234
+ - `STORAGE_CREATE` - This permission on the network account allows the
235
+ specified account to create storage accounts. As a default permission it
236
+ allows everyone to create storage accounts.
237
+ - `TOKEN_ADMIN_CREATE` - This permission on the network account allows the
238
+ specified account to create token accounts. As a default permission it
239
+ allows everyone to create token accounts.
240
+ - `TOKEN_ADMIN_SUPPLY` - This permission on a token account allows the specified
241
+ specified account to mint and burn tokens. This is useful for fungible tokens
242
+ where the supply can be changed.
243
+ - `TOKEN_ADMIN_MODIFY_BALANCE` - This permission on a token account allows the
244
+ specified specified account to modify the balance of holders of this token's
245
+ balance.
246
+ - `STORAGE_DEPOSIT` - This permission on a storage account allows the specified
247
+ specified account to deposit the specified tokens into the storage account.
248
+ - `STORAGE_CAN_HOLD` - This permission on a storage account allows the specified
249
+ specified account to hold the specified token in the storage account.
250
+ - `SEND_ON_BEHALF` - This permission of an account allows the specified principal
251
+ account to send the specified token on behalf of the account. This is useful for
252
+ shared accounts where multiple accounts can send on behalf of the account.
253
+ To use this feature see the {@link KeetaNetSDK.Referenced.UserClientConfig#signer | signer} option
254
+ to specify a different signatory for the transaction from the specified
255
+ {@link KeetaNetSDK.Referenced.UserClientConfig#account | account}.
256
+ - `PERMISSION_DELEGATE_ADD` - This permission grants a subset of the abilities
257
+ of the current account to some other account. Must be used with
258
+ {@link KeetaNetSDK.Referenced.AdjustMethod.ADD | AdjustMethod.ADD}.
259
+ - `PERMISSION_DELEGATE_REMOVE` - This permission revokes a subset of the abilities
260
+ that have been delegated. Must be used with {@link KeetaNetSDK.Referenced.AdjustMethod.SUBTRACT | AdjustMethod.SUBTRACT}
261
+ - `MANAGE_CERTIFICATE` - This permission allows the specified account to manage
262
+ the certificate of the account. This is used to set the certificate of the
263
+ account, which is used to verify the identity of the account.
264
+
265
+ ### Clients
266
+
267
+ {@link KeetaNetSDK.UserClient | Clients} in the KeetaNet SDK are the ways in
268
+ which applications primarily interact with the KeetaNet network. There are
269
+ two different clients supported:
270
+
271
+ - {@link KeetaNetSDK.UserClient | UserClient} is the main client which is used to
272
+ interact with the network. It is used to send transactions, query the ledger,
273
+ and perform other operations through the {@link KeetaNetSDK.Referenced.UserClientBuilder | UserClientBuilder}.
274
+ - {@link KeetaNetSDK.Client | Client} is a lower level client which is used to
275
+ by the {@link KeetaNetSDK.UserClient | UserClient} to interact with the
276
+ network.
277
+
278
+ ## Usage
279
+
280
+ The KeetaNet SDK is designed to be used in a variety of environments, including
281
+ NodeJS, the browser, and other JavaScript environments. It has TypeScript
282
+ type definitions.
283
+
284
+ ### NodeJS
285
+
286
+ The KeetaNet SDK can be used in NodeJS by importing the package:
287
+
288
+ ```javascript
289
+ import * as KeetaNet from '@keetanetwork/keetanet-client';
290
+ ```
291
+
292
+ From there, the SDK can be used to create a {@link KeetaNetSDK.UserClient | UserClient} and
293
+ interact with the KeetaNet network. See the {@link KeetaNetSDK.UserClient | UserClient}
294
+ documentation for more information on how to use the client.
295
+
296
+ Many other functions needed to support usage of the SDK are also in the
297
+ `@keetanetwork/keetanet-client` package, such as the {@link KeetaNetSDK.Referenced.Account | Account}
298
+ class, which is used to represent key pairs and identifiers, and the
299
+ {@link KeetaNetSDK.Referenced.Block | Block} class, which is used to represent
300
+ blocks on the ledger -- these are all imported with the `KeetaNet` import
301
+ and accessed with the {@link KeetaNetSDK.lib} namespace.
302
+
303
+ ### Browser
304
+
305
+ The KeetaNet SDK can be used in the browser by including the script tag:
306
+
307
+ ```html
308
+ <script src="https://static.test.keeta.com/keetanet-browser.js"></script>
309
+ ```
310
+
311
+ The KeetaNet SDK can then be accessed using the `KeetaNet` global variable.
312
+
313
+ ## Examples
314
+ ### Basic usage (NodeJS)
315
+
316
+ The {@link KeetaNetSDK.UserClient} is the main entry point to interact with
317
+ the KeetaNet network. It is initialized with a network name and an account
318
+ using the {@link KeetaNetSDK.UserClient.fromNetwork} constructor.
319
+
320
+ ```javascript
321
+ import * as KeetaNet from '@keetanetwork/keetanet-client';
322
+
323
+ const seed = KeetaNet.lib.Account.generateRandomSeed({ asString: true });
324
+ const account = KeetaNet.lib.Account.fromSeed(seed, 0);
325
+ const client = KeetaNet.UserClient.fromNetwork('test', account);
326
+
327
+ async function main() {
328
+ console.debug(await client.chain());
329
+ }
330
+
331
+ main().then(function() {
332
+ process.exit(0);
333
+ }, function(error) {
334
+ console.error(error);
335
+ process.exit(1);
336
+ });
337
+ ```
338
+
339
+ ### Basic usage (Browser)
340
+
341
+ The SDK can be loaded in the browser with a script tag:
342
+ ```html
343
+ <html>
344
+ <head>
345
+ <script src="https://static.test.keeta.com/keetanet-browser.js"></script>
346
+ </head>
347
+ <body>
348
+ <script>
349
+ const seed = KeetaNet.lib.Account.generateRandomSeed({ asString: true });
350
+ const account = KeetaNet.lib.Account.fromSeed(seed, 0);
351
+ const client = KeetaNet.UserClient.fromNetwork('test', account);
352
+
353
+ client.chain().then(console.debug);
354
+ </script>
355
+ </body>
356
+ </html>
357
+ ```
358
+
359
+ ### Full examples
360
+ - [Basic Example](./examples/basic/index.js)
361
+ - [Real World Assets with NFT](./examples/rwa-nft/index.js)
@@ -1 +1 @@
1
- window.hierarchyData = "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"
1
+ window.hierarchyData = "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"
@@ -1 +1 @@
1
- window.navigationData = "eJyNz0ELgjAYxvHvsrNlKcTwFikSggddJ/EwtzccTQ03Iwi/e4PAqQfpuvfPjz3FB2l4axSgOCLkmsa7nJwzEoXIQU+qa3PgHRsaaLVyV8m+1o003UO0HAXYx/h0wKMziQmApinoPEys1nR8kKDc2XHpeA5itZC8hxYFxYRlcAfzxIBvW7ZbsbOPXaQwe6zDJFVq5fyapXH05vNuCvp/JNttaVJUlnnRXtBqPc0kS8H3xnIsv9F3k/E="
1
+ window.navigationData = "eJyNz8ELgjAUx/H/5Z1XlkKIt0iREDyoncTDdC8czRnbjCD83zsETj1I5/flw/uVHzD4NhBAHBXFNY13eXHOiigEAk9qWgiA9c3QoTTaWSX71nQCCDy4ZBD4nu+fDv5IJjFBNDRFk4eJ1bqeDQK1MzsuHZdA03LBFEoIygnL8I4KZYNs27Ldip09dhEcpbFOI6jWK+fXLI2jO59306j+kWy3pQleW+ZFFaf1eprg9VLw3LEaqy/Rd5Px"