vasku
Version:
TVM-Solidity contract development framework
97 lines (78 loc) • 2.5 kB
text/typescript
import { GiverV2Content } from './GiverV2Content'
import { type CompiledContractConfig, Contract, type ContractOptions, type ResultOfCall } from '../../index'
import { type KeyPair } from '@eversdk/core'
type SendTransactionIn = {
dest: string
value: number | string | bigint
bounce: boolean
}
type UpgradeIn = {
code: string
}
type GetMessagesOut = {
messages: Array<{
hash: string
expireAt: string
}>
}
export class GiverV2 extends Contract {
private readonly _call: GiverV2Calls
private readonly _run: GiverV2Runs
private readonly _payload: GiverV2Payload
constructor (config: CompiledContractConfig = {}, options: ContractOptions = {}) {
if (config.address === undefined)
super({
abi: GiverV2Content.abi,
initial: config.initial ?? {},
keys: config.keys,
tvc: GiverV2Content.tvc
}, options)
else
super({
address: config.address,
abi: GiverV2Content.abi
}, options)
this._call = new GiverV2Calls(this)
this._run = new GiverV2Runs(this)
this._payload = new GiverV2Payload(this)
}
get call (): GiverV2Calls {
return this._call
}
get run (): GiverV2Runs {
return this._run
}
get payload (): GiverV2Payload {
return this._payload
}
}
class GiverV2Calls {
constructor (private readonly contract: Contract) {}
async sendTransaction (input: SendTransactionIn, keys?: KeyPair): Promise<ResultOfCall> {
return await this.contract.callMethod('sendTransaction', input, keys)
}
async upgrade (input: UpgradeIn, keys?: KeyPair): Promise<ResultOfCall> {
return await this.contract.callMethod('upgrade', input, keys)
}
async getMessages (keys?: KeyPair): Promise<ResultOfCall & { out: GetMessagesOut }> {
return await this.contract.callMethod('getMessages', {}, keys)
}
}
class GiverV2Runs {
constructor (private readonly contract: Contract) {}
async getMessages (): Promise<GetMessagesOut> {
return (await this.contract.runMethod('getMessages')).value
}
}
class GiverV2Payload {
constructor (private readonly contract: Contract) {}
async sendTransaction (input: SendTransactionIn): Promise<string> {
return await this.contract.createPayload('sendTransaction', input)
}
async upgrade (input: UpgradeIn): Promise<string> {
return await this.contract.createPayload('upgrade', input)
}
async getMessages (): Promise<string> {
return await this.contract.createPayload('getMessages')
}
}