UNPKG

@xcapit/shelter-sdk

Version:

SDK for Shelter smart contracts on Stellar

54 lines (48 loc) 1.63 kB
import type { AssembledTransaction } from "@stellar/stellar-sdk/contract"; import { Shelter } from "../shelter/shelter"; import { Client, Keypair } from "shelter-sdk"; import type { FakeClient } from "../fake-client/fake-client"; import { StrKey, Address } from "@stellar/stellar-sdk"; import { Transaction } from "../transaction/transaction"; import type { Rpc } from "../rpc/rpc"; export class Foundry { constructor( private readonly _steward: Keypair, private readonly _rpc: Rpc, private readonly _wasm: Buffer | string, private readonly _client: typeof Client | typeof FakeClient = Client ) { } async newShelter(): Promise<Shelter> { return new Shelter( this._steward, this._rpc, new this._client({ contractId: await this._address(await this._deploy()), networkPassphrase: await this._rpc.network(), rpcUrl: this._rpc.url(), publicKey: this._steward.publicKey(), }) ); } private async _deploy(): Promise<any> { return await this._client.deploy( { steward: this._steward.publicKey() }, { wasmHash: this._wasm, networkPassphrase: await this._rpc.network(), rpcUrl: this._rpc.url(), publicKey: this._steward.publicKey(), } ) } private async _address(rawTx: AssembledTransaction<Client>): Promise<string> { return this._addressOf( await new Transaction(rawTx, this._steward, this._rpc).result() ); } private async _addressOf(txData: any) { return StrKey.encodeContract( Address.fromScAddress(txData.returnValue.address()).toBuffer() ); } }