@andreivcodes/spacemeshlib v2.1.0
spacemeshlib
spacemeshlib is a typescript library for the Spacemesh network.
Installation
npm install @andreivcodes/spacemeshlibyarn add @andreivcodes/spacemeshlibFeatures
- Imports Spacemesh API, builds it to typescript using ts-proto
- Imports a modified fork of ed25519-WASM, and builds a
.wasmfile - Exports grpc clients using nice-grpc
- Exports functions of
ed25519.wasmthrough a TypeScript version ofwasm_exex.js - Abstracts away a lot of the boilerplate of grpc and wasm.
- Exports easy to work with functions as
createClients(NETWORK_URL, 443, true)orderivePublicKey(SEED, 0)
Usage
import {
toHexString,
derivePrivateKey,
derivePublicKey,
getAccountBalance,
getAccountNonce,
submitTransaction,
createClients,
SubmitTransactionResponse,
} from '@andreivcodes/spacemeshlib'
const NETWORK_URL = 'https://api-devnet226.spacemesh.io/'
const SEED: string = process.env.SEEDPHRASE!
const RECIPIENT: string = '0x38DB093Ce43Fe3dB88D89568bAAeB68A6b5E74a6'.slice(2)
//loads public key from seed
const pk = (await derivePublicKey(SEED, 0)) as Uint8Array
//connects to network and returns nice-grpc clients
createClients(NETWORK_URL, 443, true)
//gets account nonce and balance
const accountNonce = await getAccountNonce(pk)
const accountBalance = await getAccountBalance(pk)
if (accountBalance < amount) {
console.log('I am out of funds :(')
return
}
//changing state of the mesh requires a private key, so we load that
//same as we did with public key, but using derivePrivateKey
const pk = (await derivePrivateKey(SEED, 0)) as Uint8Array
//submit a transaction
submitTransaction({
accountNonce: accountNonce,
receiver: RECIPIENT
gasLimit: 1,
fee: 1,
amount: 100,
secretKey: sk,
})
//and get a response back
.then((response: SubmitTransactionResponse) => {
console.log(`💸 just transferred funds to ${RECIPIENT}.`)
console.log(`Tx ID: 0x${toHexString(response.txstate?.id?.id!)}`)
})
.catch((err: any) => {
console.log(`could not transfer :( submitTransaction failed`)
console.log(err)
})Docs
Typedoc generated docs are available here.
Build
Requirements
- protobuf
- golang
yarnInstalls all dependencies
yarn build:nodeCleans old files, generates new index files, lints and builds using current protoc and wasm files
ESM build is stored in /dist/esm
CommonJS build is stored in /dist/cjs
Types are stored in /dist/types
yarn build:wasmcompiles a new src/wasm/ed25519.wasm from /src/wasm/ed25519-WASM/
go1.19.1 is required!
yarn build:protocCompiles proto files from /src/proto/api and stores result in /src/proto/dist
protobuf is required!
yarn build:allbuild:node, build:wasm and build:protoc.
Builds everything.
protobuf and go1.19.1 are required!
yarn gen-indexGenerates index.js for exports automatically using ctix
yarn proto:watchCompiles proto files on any file change
yarn lintRuns ESLint
yarn prettierRuns prettier
yarn docsGenerates docs using Typedoc and stores results in /docs
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests and docs as appropriate.
License
Tests
| Tests | Skipped | Failures | Errors | Time |
|---|---|---|---|---|
| 19 | 0 :zzz: | 0 :x: | 0 :fire: | 14.666s :stopwatch: |
| Lines | Statements | Branches | Functions |
|---|---|---|---|
| 94.41% (186/197) | 62.5% (20/32) | 81.94% (59/72) |
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago