Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"scripts": {
"bindings:stellar": "tsx stellar/scripts/generate-bindings.ts",
"build:stellar": "pnpm bindings:stellar && cd stellar && cargo build --target wasm32-unknown-unknown --release",
"test:stellar-bindings": "vitest run stellar/scripts/stealth-batch-sender-bindings.test.ts stellar/scripts/bindings-portability.test.ts"
"test:stellar-bindings": "vitest run stellar/scripts/stealth-batch-sender-bindings.test.ts stellar/scripts/governance-bindings.test.ts"
},
"pnpm": {
"onlyBuiltDependencies": ["esbuild"]
Expand Down
8 changes: 8 additions & 0 deletions stellar/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions stellar/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ resolver = "2"

[workspace.dependencies]
soroban-sdk = "22.0.11"
soroban-spec = "22.0.11"

# Keep the release profile at the workspace root: Cargo ignores profiles declared
# in member manifests. These settings apply to every contract cdylib, including
Expand Down
2 changes: 1 addition & 1 deletion stellar/abi/update.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ echo "Building contracts..."
cargo build --target wasm32-unknown-unknown --release

echo "Extracting ABI snapshots..."
for contract in stealth_announcer stealth_registry stealth_sender stealth_batch_sender wraith_names; do
for contract in stealth_announcer stealth_registry stealth_sender stealth_batch_sender wraith_names stealth_splitter stealth_vault wraith_asset_policy; do
stellar contract info interface \
--wasm "target/wasm32-unknown-unknown/release/${contract}.wasm" \
--output json-formatted > "abi/${contract}.json"
Expand Down
5 changes: 5 additions & 0 deletions stellar/bindings/typescript/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,8 @@ export * as StealthRegistry from './stealth-registry/src/index';
export * as StealthSender from './stealth-sender/src/index';
export * as StealthBatchSender from './stealth-batch-sender/src/index';
export * as WraithNames from './wraith-names/src/index';
export * as StealthSplitter from './stealth-splitter/src/index';
export * as StealthVault from './stealth-vault/src/index';
export * as WraithAssetPolicy from './wraith-asset-policy/src/index';
// Governance binding temporarily removed - needs to be regenerated with stellar CLI
// export * as Governance from './governance/src/index';
2 changes: 2 additions & 0 deletions stellar/bindings/typescript/stealth-splitter/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules/
out/
54 changes: 54 additions & 0 deletions stellar/bindings/typescript/stealth-splitter/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# stealth-splitter JS

JS library for interacting with [Soroban](https://soroban.stellar.org/) smart contract `stealth-splitter` via Soroban RPC.

This library was automatically generated by Soroban CLI using a command similar to:

```bash
soroban contract bindings ts \
--rpc-url INSERT_RPC_URL_HERE \
--network-passphrase "INSERT_NETWORK_PASSPHRASE_HERE" \
--contract-id INSERT_CONTRACT_ID_HERE \
--output-dir ./path/to/stealth-splitter
```

The network passphrase and contract ID are exported from [index.ts](./src/index.ts) in the `networks` constant. If you are the one who generated this library and you know that this contract is also deployed to other networks, feel free to update `networks` with other valid options. This will help your contract consumers use this library more easily.

# To publish or not to publish

This library is suitable for publishing to NPM. You can publish it to NPM using the `npm publish` command.

But you don't need to publish this library to NPM to use it. You can add it to your project's `package.json` using a file path:

```json
"dependencies": {
"stealth-splitter": "./path/to/this/folder"
}
```

However, we've actually encountered [frustration](https://github.com/stellar/soroban-example-dapp/pull/117#discussion_r1232873560) using local libraries with NPM in this way. Though it seems a bit messy, we suggest generating the library directly to your `node_modules` folder automatically after each install by using a `postinstall` script. We've had the least trouble with this approach. NPM will automatically remove what it sees as erroneous directories during the `install` step, and then regenerate them when it gets to your `postinstall` step, which will keep the library up-to-date with your contract.

```json
"scripts": {
"postinstall": "soroban contract bindings ts --rpc-url INSERT_RPC_URL_HERE --network-passphrase \"INSERT_NETWORK_PASSPHRASE_HERE\" --id INSERT_CONTRACT_ID_HERE --name stealth-splitter"
}
```

Obviously you need to adjust the above command based on the actual command you used to generate the library.

# Use it

Now that you have your library up-to-date and added to your project, you can import it in a file and see inline documentation for all of its exported methods:

```js
import { Contract, networks } from "stealth-splitter"

const contract = new Contract({
...networks.futurenet, // for example; check which networks this library exports
rpcUrl: '...', // use your own, or find one for testing at https://soroban.stellar.org/docs/reference/rpc#public-rpc-providers
})

contract.|
```

As long as your editor is configured to show JavaScript/TypeScript documentation, you can pause your typing at that `|` to get a list of all exports and inline-documentation for each. It exports a separate [async](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) function for each method in the smart contract, with documentation for each generated from the comments the contract's author included in the original source code.
17 changes: 17 additions & 0 deletions stellar/bindings/typescript/stealth-splitter/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"version": "0.0.0",
"name": "stealth-splitter",
"type": "module",
"exports": "./dist/index.js",
"typings": "dist/index.d.ts",
"scripts": {
"build": "tsc"
},
"dependencies": {
"@stellar/stellar-sdk": "^16.0.1",
"buffer": "6.0.3"
},
"devDependencies": {
"typescript": "^5.6.2"
}
}
253 changes: 253 additions & 0 deletions stellar/bindings/typescript/stealth-splitter/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
import { Buffer } from "buffer";
import { Address } from "@stellar/stellar-sdk";
import {
AssembledTransaction,
Client as ContractClient,
ClientOptions as ContractClientOptions,
MethodOptions,
Result,
Spec as ContractSpec,
} from "@stellar/stellar-sdk/contract";
import type {
u32,
i32,
u64,
i64,
u128,
i128,
u256,
i256,
Option,
Timepoint,
Duration,
} from "@stellar/stellar-sdk/contract";
export * from "@stellar/stellar-sdk";
export * as contract from "@stellar/stellar-sdk/contract";
export * as rpc from "@stellar/stellar-sdk/rpc";

if (typeof window !== "undefined") {
//@ts-ignore Buffer exists
window.Buffer = window.Buffer || Buffer;
}




/**
* Storage keys.
*/
export type DataKey = {tag: "Announcer", values: void} | {tag: "Split", values: readonly [Buffer]} | {tag: "SplitFunded", values: readonly [Buffer]};


/**
* A single beneficiary in a split.
*/
export interface Beneficiary {
/**
* Stealth meta-address of the beneficiary (64 bytes: spending_pubkey || viewing_pubkey).
*/
meta_address: Buffer;
/**
* Weight for proportional distribution.
*/
weight: u128;
}


/**
* Details returned by get_split query.
*/
export interface SplitDetails {
/**
* Immutable list of beneficiaries.
*/
beneficiaries: Array<Beneficiary>;
/**
* Total amount funded to date.
*/
total_funded: i128;
}

/**
* Errors that the splitter contract can produce.
*/
export const SplitterError = {
/**
* The contract has already been initialised.
*/
1: {message:"AlreadyInitialized"},
/**
* The contract has not been initialised yet.
*/
2: {message:"NotInitialized"},
/**
* The split does not exist.
*/
3: {message:"SplitNotFound"},
/**
* Too many beneficiaries (max 25).
*/
4: {message:"TooManyBeneficiaries"},
/**
* Weight sum would overflow (internal sanity check).
*/
5: {message:"WeightOverflow"},
/**
* Invalid beneficiary meta-address length (must be 64 bytes).
*/
6: {message:"InvalidMetaAddressLength"},
/**
* Amount to fund is zero or negative.
*/
7: {message:"InvalidAmount"},
/**
* Empty beneficiary list.
*/
8: {message:"EmptyBeneficiaries"}
}


/**
* Complete definition of a split.
*/
export interface SplitDefinition {
/**
* Token contract address.
*/
asset: string;
/**
* List of beneficiaries (max 25 enforced at creation).
*/
beneficiaries: Array<Beneficiary>;
/**
* Creator address.
*/
creator: string;
/**
* Salt used to create this split (for uniqueness).
*/
salt: Buffer;
}


/**
* Wraith Protocol standard metric event schema.
*
* All Wraith contracts emit metric events using this structure to enable
* standardized off-chain observability and monitoring.
*/
export interface WraithMetricEvent {
/**
* Contract identifier (e.g., "stealth-registry", "stealth-sender")
*/
contract: string;
/**
* Optional dimensions for filtering/grouping (e.g., token_address, scheme_id)
*/
dimensions: Array<readonly [string, any]>;
/**
* Metric name (e.g., "register_count", "send_volume")
*/
metric_name: string;
/**
* Numeric value of the metric
*/
value: i128;
}

export interface Client {
/**
* Construct and simulate a init transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
* Initialise the contract by storing the announcer address.
*
* Must be called exactly once before any `create_split` or `fund_split`.
*/
init: ({announcer}: {announcer: string}, options?: MethodOptions) => Promise<AssembledTransaction<Result<void>>>

/**
* Construct and simulate a get_split transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
* Query split details: beneficiaries and total funded amount.
*
* # Arguments
* * `split_id` - The split to query.
*
* # Returns
* SplitDetails with immutable beneficiary list and total_funded.
*/
get_split: ({split_id}: {split_id: Buffer}, options?: MethodOptions) => Promise<AssembledTransaction<Result<SplitDetails>>>

/**
* Construct and simulate a fund_split transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
* Fund a split: deposit amount and atomically distribute to all beneficiaries.
*
* Each beneficiary receives a proportional share based on their weight.
* Rounding error (dust) is absorbed by the first beneficiary.
* All transfers and announcements are atomic: any failure rolls back everything.
*
* # Arguments
* * `funder` - The address funding the split (must authorise).
* * `split_id` - The split to fund.
* * `amount` - Total amount to distribute.
* * `scheme_id` - Stealth address scheme identifier.
* * `stealth_addresses` - One-time stealth address for each beneficiary.
* * `ephemeral_pub_keys` - Ephemeral key for each beneficiary.
* * `metadatas` - Metadata (e.g. view tag) for each beneficiary.
*/
fund_split: ({funder, split_id, amount, scheme_id, stealth_addresses, ephemeral_pub_keys, metadatas}: {funder: string, split_id: Buffer, amount: i128, scheme_id: u32, stealth_addresses: Array<string>, ephemeral_pub_keys: Array<Buffer>, metadatas: Array<Buffer>}, options?: MethodOptions) => Promise<AssembledTransaction<Result<void>>>

/**
* Construct and simulate a create_split transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
* Create a split definition (immutable after creation).
*
* Computes a deterministic split_id from the beneficiaries, asset, and salt.
* The split is not funded until `fund_split` is called.
*
* # Arguments
* * `creator` - The address creating the split (must authorise).
* * `beneficiaries` - List of (meta_address, weight) pairs. Max 25.
* * `asset` - The token contract address to be split.
* * `salt` - Random bytes to ensure uniqueness.
*
* # Returns
* The deterministic split_id (32-byte hash).
*/
create_split: ({creator, beneficiaries, asset, salt}: {creator: string, beneficiaries: Array<Beneficiary>, asset: string, salt: Buffer}, options?: MethodOptions) => Promise<AssembledTransaction<Result<Buffer>>>

}
export class Client extends ContractClient {
static async deploy<T = Client>(
/** Options for initializing a Client as well as for calling a method, with extras specific to deploying. */
options: MethodOptions &
Omit<ContractClientOptions, "contractId"> & {
/** The hash of the Wasm blob, which must already be installed on-chain. */
wasmHash: Buffer | string;
/** Salt used to generate the contract's ID. Passed through to {@link Operation.createCustomContract}. Default: random. */
salt?: Buffer | Uint8Array;
/** The format used to decode `wasmHash`, if it's provided as a string. */
format?: "hex" | "base64";
}
): Promise<AssembledTransaction<T>> {
return ContractClient.deploy(null, options)
}
constructor(public readonly options: ContractClientOptions) {
super(
new ContractSpec([ "AAAAAAAAAIFJbml0aWFsaXNlIHRoZSBjb250cmFjdCBieSBzdG9yaW5nIHRoZSBhbm5vdW5jZXIgYWRkcmVzcy4KCk11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgYW55IGBjcmVhdGVfc3BsaXRgIG9yIGBmdW5kX3NwbGl0YC4AAAAAAAAEaW5pdAAAAAEAAAAAAAAACWFubm91bmNlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAH0AAAAA1TcGxpdHRlckVycm9yAAAA",
"AAAAAAAAALVRdWVyeSBzcGxpdCBkZXRhaWxzOiBiZW5lZmljaWFyaWVzIGFuZCB0b3RhbCBmdW5kZWQgYW1vdW50LgoKIyBBcmd1bWVudHMKKiBgc3BsaXRfaWRgIC0gVGhlIHNwbGl0IHRvIHF1ZXJ5LgoKIyBSZXR1cm5zClNwbGl0RGV0YWlscyB3aXRoIGltbXV0YWJsZSBiZW5lZmljaWFyeSBsaXN0IGFuZCB0b3RhbF9mdW5kZWQuAAAAAAAACWdldF9zcGxpdAAAAAAAAAEAAAAAAAAACHNwbGl0X2lkAAAD7gAAACAAAAABAAAD6QAAB9AAAAAMU3BsaXREZXRhaWxzAAAH0AAAAA1TcGxpdHRlckVycm9yAAAA",
"AAAAAgAAAA1TdG9yYWdlIGtleXMuAAAAAAAAAAAAAAdEYXRhS2V5AAAAAAMAAAAAAAAAMkFkZHJlc3Mgb2YgdGhlIGRlcGxveWVkIFN0ZWFsdGhBbm5vdW5jZXIgY29udHJhY3QuAAAAAAAJQW5ub3VuY2VyAAAAAAAAAQAAAD5TdG9yZXMgc3BsaXQgZGVmaW5pdGlvbjogU3BsaXREZWZpbml0aW9uIGZvciBhIGdpdmVuIHNwbGl0X2lkLgAAAAAABVNwbGl0AAAAAAAAAQAAA+4AAAAgAAAAAQAAADBUcmFja3MgdG90YWwgZnVuZGVkIGFtb3VudCBmb3IgYSBnaXZlbiBzcGxpdF9pZC4AAAALU3BsaXRGdW5kZWQAAAAAAQAAA+4AAAAg",
"AAAAAAAAAqlGdW5kIGEgc3BsaXQ6IGRlcG9zaXQgYW1vdW50IGFuZCBhdG9taWNhbGx5IGRpc3RyaWJ1dGUgdG8gYWxsIGJlbmVmaWNpYXJpZXMuCgpFYWNoIGJlbmVmaWNpYXJ5IHJlY2VpdmVzIGEgcHJvcG9ydGlvbmFsIHNoYXJlIGJhc2VkIG9uIHRoZWlyIHdlaWdodC4KUm91bmRpbmcgZXJyb3IgKGR1c3QpIGlzIGFic29yYmVkIGJ5IHRoZSBmaXJzdCBiZW5lZmljaWFyeS4KQWxsIHRyYW5zZmVycyBhbmQgYW5ub3VuY2VtZW50cyBhcmUgYXRvbWljOiBhbnkgZmFpbHVyZSByb2xscyBiYWNrIGV2ZXJ5dGhpbmcuCgojIEFyZ3VtZW50cwoqIGBmdW5kZXJgIC0gVGhlIGFkZHJlc3MgZnVuZGluZyB0aGUgc3BsaXQgKG11c3QgYXV0aG9yaXNlKS4KKiBgc3BsaXRfaWRgIC0gVGhlIHNwbGl0IHRvIGZ1bmQuCiogYGFtb3VudGAgLSBUb3RhbCBhbW91bnQgdG8gZGlzdHJpYnV0ZS4KKiBgc2NoZW1lX2lkYCAtIFN0ZWFsdGggYWRkcmVzcyBzY2hlbWUgaWRlbnRpZmllci4KKiBgc3RlYWx0aF9hZGRyZXNzZXNgIC0gT25lLXRpbWUgc3RlYWx0aCBhZGRyZXNzIGZvciBlYWNoIGJlbmVmaWNpYXJ5LgoqIGBlcGhlbWVyYWxfcHViX2tleXNgIC0gRXBoZW1lcmFsIGtleSBmb3IgZWFjaCBiZW5lZmljaWFyeS4KKiBgbWV0YWRhdGFzYCAtIE1ldGFkYXRhIChlLmcuIHZpZXcgdGFnKSBmb3IgZWFjaCBiZW5lZmljaWFyeS4AAAAAAAAKZnVuZF9zcGxpdAAAAAAABwAAAAAAAAAGZnVuZGVyAAAAAAATAAAAAAAAAAhzcGxpdF9pZAAAA+4AAAAgAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAACXNjaGVtZV9pZAAAAAAAAAQAAAAAAAAAEXN0ZWFsdGhfYWRkcmVzc2VzAAAAAAAD6gAAABMAAAAAAAAAEmVwaGVtZXJhbF9wdWJfa2V5cwAAAAAD6gAAA+4AAAAgAAAAAAAAAAltZXRhZGF0YXMAAAAAAAPqAAAADgAAAAEAAAPpAAAD7QAAAAAAAAfQAAAADVNwbGl0dGVyRXJyb3IAAAA=",
"AAAAAAAAAd1DcmVhdGUgYSBzcGxpdCBkZWZpbml0aW9uIChpbW11dGFibGUgYWZ0ZXIgY3JlYXRpb24pLgoKQ29tcHV0ZXMgYSBkZXRlcm1pbmlzdGljIHNwbGl0X2lkIGZyb20gdGhlIGJlbmVmaWNpYXJpZXMsIGFzc2V0LCBhbmQgc2FsdC4KVGhlIHNwbGl0IGlzIG5vdCBmdW5kZWQgdW50aWwgYGZ1bmRfc3BsaXRgIGlzIGNhbGxlZC4KCiMgQXJndW1lbnRzCiogYGNyZWF0b3JgIC0gVGhlIGFkZHJlc3MgY3JlYXRpbmcgdGhlIHNwbGl0IChtdXN0IGF1dGhvcmlzZSkuCiogYGJlbmVmaWNpYXJpZXNgIC0gTGlzdCBvZiAobWV0YV9hZGRyZXNzLCB3ZWlnaHQpIHBhaXJzLiBNYXggMjUuCiogYGFzc2V0YCAtIFRoZSB0b2tlbiBjb250cmFjdCBhZGRyZXNzIHRvIGJlIHNwbGl0LgoqIGBzYWx0YCAtIFJhbmRvbSBieXRlcyB0byBlbnN1cmUgdW5pcXVlbmVzcy4KCiMgUmV0dXJucwpUaGUgZGV0ZXJtaW5pc3RpYyBzcGxpdF9pZCAoMzItYnl0ZSBoYXNoKS4AAAAAAAAMY3JlYXRlX3NwbGl0AAAABAAAAAAAAAAHY3JlYXRvcgAAAAATAAAAAAAAAA1iZW5lZmljaWFyaWVzAAAAAAAD6gAAB9AAAAALQmVuZWZpY2lhcnkAAAAAAAAAAAVhc3NldAAAAAAAABMAAAAAAAAABHNhbHQAAAAOAAAAAQAAA+kAAAPuAAAAIAAAB9AAAAANU3BsaXR0ZXJFcnJvcgAAAA==",
"AAAAAQAAACBBIHNpbmdsZSBiZW5lZmljaWFyeSBpbiBhIHNwbGl0LgAAAAAAAAALQmVuZWZpY2lhcnkAAAAAAgAAAFZTdGVhbHRoIG1ldGEtYWRkcmVzcyBvZiB0aGUgYmVuZWZpY2lhcnkgKDY0IGJ5dGVzOiBzcGVuZGluZ19wdWJrZXkgfHwgdmlld2luZ19wdWJrZXkpLgAAAAAADG1ldGFfYWRkcmVzcwAAAA4AAAAlV2VpZ2h0IGZvciBwcm9wb3J0aW9uYWwgZGlzdHJpYnV0aW9uLgAAAAAAAAZ3ZWlnaHQAAAAAAAo=",
"AAAAAQAAACREZXRhaWxzIHJldHVybmVkIGJ5IGdldF9zcGxpdCBxdWVyeS4AAAAAAAAADFNwbGl0RGV0YWlscwAAAAIAAAAgSW1tdXRhYmxlIGxpc3Qgb2YgYmVuZWZpY2lhcmllcy4AAAANYmVuZWZpY2lhcmllcwAAAAAAA+oAAAfQAAAAC0JlbmVmaWNpYXJ5AAAAABxUb3RhbCBhbW91bnQgZnVuZGVkIHRvIGRhdGUuAAAADHRvdGFsX2Z1bmRlZAAAAAs=",
"AAAABAAAAC5FcnJvcnMgdGhhdCB0aGUgc3BsaXR0ZXIgY29udHJhY3QgY2FuIHByb2R1Y2UuAAAAAAAAAAAADVNwbGl0dGVyRXJyb3IAAAAAAAAIAAAAKlRoZSBjb250cmFjdCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpc2VkLgAAAAAAEkFscmVhZHlJbml0aWFsaXplZAAAAAAAAQAAACpUaGUgY29udHJhY3QgaGFzIG5vdCBiZWVuIGluaXRpYWxpc2VkIHlldC4AAAAAAA5Ob3RJbml0aWFsaXplZAAAAAAAAgAAABlUaGUgc3BsaXQgZG9lcyBub3QgZXhpc3QuAAAAAAAADVNwbGl0Tm90Rm91bmQAAAAAAAADAAAAIFRvbyBtYW55IGJlbmVmaWNpYXJpZXMgKG1heCAyNSkuAAAAFFRvb01hbnlCZW5lZmljaWFyaWVzAAAABAAAADJXZWlnaHQgc3VtIHdvdWxkIG92ZXJmbG93IChpbnRlcm5hbCBzYW5pdHkgY2hlY2spLgAAAAAADldlaWdodE92ZXJmbG93AAAAAAAFAAAAO0ludmFsaWQgYmVuZWZpY2lhcnkgbWV0YS1hZGRyZXNzIGxlbmd0aCAobXVzdCBiZSA2NCBieXRlcykuAAAAABhJbnZhbGlkTWV0YUFkZHJlc3NMZW5ndGgAAAAGAAAAI0Ftb3VudCB0byBmdW5kIGlzIHplcm8gb3IgbmVnYXRpdmUuAAAAAA1JbnZhbGlkQW1vdW50AAAAAAAABwAAABdFbXB0eSBiZW5lZmljaWFyeSBsaXN0LgAAAAASRW1wdHlCZW5lZmljaWFyaWVzAAAAAAAI",
"AAAAAQAAAB9Db21wbGV0ZSBkZWZpbml0aW9uIG9mIGEgc3BsaXQuAAAAAAAAAAAPU3BsaXREZWZpbml0aW9uAAAAAAQAAAAXVG9rZW4gY29udHJhY3QgYWRkcmVzcy4AAAAABWFzc2V0AAAAAAAAEwAAADRMaXN0IG9mIGJlbmVmaWNpYXJpZXMgKG1heCAyNSBlbmZvcmNlZCBhdCBjcmVhdGlvbikuAAAADWJlbmVmaWNpYXJpZXMAAAAAAAPqAAAH0AAAAAtCZW5lZmljaWFyeQAAAAAQQ3JlYXRvciBhZGRyZXNzLgAAAAdjcmVhdG9yAAAAABMAAAAwU2FsdCB1c2VkIHRvIGNyZWF0ZSB0aGlzIHNwbGl0IChmb3IgdW5pcXVlbmVzcykuAAAABHNhbHQAAAAO",
"AAAAAQAAAKpXcmFpdGggUHJvdG9jb2wgc3RhbmRhcmQgbWV0cmljIGV2ZW50IHNjaGVtYS4KCkFsbCBXcmFpdGggY29udHJhY3RzIGVtaXQgbWV0cmljIGV2ZW50cyB1c2luZyB0aGlzIHN0cnVjdHVyZSB0byBlbmFibGUKc3RhbmRhcmRpemVkIG9mZi1jaGFpbiBvYnNlcnZhYmlsaXR5IGFuZCBtb25pdG9yaW5nLgAAAAAAAAAAABFXcmFpdGhNZXRyaWNFdmVudAAAAAAAAAQAAABAQ29udHJhY3QgaWRlbnRpZmllciAoZS5nLiwgInN0ZWFsdGgtcmVnaXN0cnkiLCAic3RlYWx0aC1zZW5kZXIiKQAAAAhjb250cmFjdAAAABEAAABLT3B0aW9uYWwgZGltZW5zaW9ucyBmb3IgZmlsdGVyaW5nL2dyb3VwaW5nIChlLmcuLCB0b2tlbl9hZGRyZXNzLCBzY2hlbWVfaWQpAAAAAApkaW1lbnNpb25zAAAAAAPqAAAD7QAAAAIAAAARAAAAAAAAADNNZXRyaWMgbmFtZSAoZS5nLiwgInJlZ2lzdGVyX2NvdW50IiwgInNlbmRfdm9sdW1lIikAAAAAC21ldHJpY19uYW1lAAAAABEAAAAbTnVtZXJpYyB2YWx1ZSBvZiB0aGUgbWV0cmljAAAAAAV2YWx1ZQAAAAAAAAs=" ]),
options
)
}
public readonly fromJSON = {
init: this.txFromJSON<Result<void>>,
get_split: this.txFromJSON<Result<SplitDetails>>,
fund_split: this.txFromJSON<Result<void>>,
create_split: this.txFromJSON<Result<Buffer>>
}
}
Loading
Loading