@bandprotocol/bandchain.js
Version:
Library for interacting with BandChain in browser and Node.js environments
113 lines (96 loc) • 3.11 kB
text/typescript
import { Client, Wallet, Message, Coin, Transaction, Fee } from '../../lib'
import fs from 'fs'
import path from 'path'
const grpcEndpoint = 'https://laozi-testnet6.bandchain.org/grpc-web'
const client = new Client(grpcEndpoint)
const { PrivateKey } = Wallet
const mnemonic = 'test'
const privateKey = PrivateKey.fromMnemonic(mnemonic)
const pubkey = privateKey.toPubkey()
const sender = pubkey.toAddress().toAccBech32()
const owner = 'band18e55d9xyrgyg3tk72zmg7s92uu8sd95jzgj73a'
export async function exampleCreateOracleScript() {
// don't forget to copy this file when you copy the code
const execPath = path.resolve(
__dirname,
'./mock/standard_dataset_crypto_mainnet.wasm',
)
const code = fs.readFileSync(execPath)
let feeCoin = new Coin()
feeCoin.setDenom('uband')
feeCoin.setAmount('5000')
// Step 2.2: Create an oracle request message
// name: string
// code: Buffer
// owner: string
// sender: string
// description?: string
// schema?: string
// sourceCodeUrl?: string
const requestMessage = new Message.MsgCreateOracleScript(
'Oracle Script Name',
code,
sender,
sender,
'Oracle Script Description',
'{symbols:[string],multiplier:u64}/{rates:[u64]}',
'https://mockurl.com',
)
const fee = new Fee()
fee.setAmountList([feeCoin])
fee.setGasLimit(1500000)
const chainId = await client.getChainId()
const txn = new Transaction()
txn.withMessages(requestMessage)
await txn.withSender(client, sender)
txn.withChainId(chainId)
txn.withFee(fee)
txn.withMemo('')
const signDoc = txn.getSignDoc(pubkey)
const signature = privateKey.sign(signDoc)
const txRawBytes = txn.getTxData(signature, pubkey)
const sendTx = await client.sendTxBlockMode(txRawBytes)
return sendTx
}
export async function exampleEditOracleScript(id: number) {
// don't forget to copy this file when you copy the code
const execPath = path.resolve(__dirname, './mock/example_oracle_script.wasm')
const code = fs.readFileSync(execPath)
let feeCoin = new Coin()
feeCoin.setDenom('uband')
feeCoin.setAmount('5000')
// Step 2.2: Create an oracle request message
// oracleScriptId: number
// owner: string
// sender: string
// name: string
// description: string
// schema: string
// sourceCodeUrl: string
// code: Buffer | string
const requestMessage = new Message.MsgEditOracleScript(
id,
owner,
sender,
'Edit Oracle Script Name',
'Edit Oracle Script Description',
'{symbols:[string],multiplier:u64}/{rates:[u64]}',
'https://mockurl.com',
code,
)
const fee = new Fee()
fee.setAmountList([feeCoin])
fee.setGasLimit(1500000)
const chainId = await client.getChainId()
const txn = new Transaction()
txn.withMessages(requestMessage)
await txn.withSender(client, sender)
txn.withChainId(chainId)
txn.withFee(fee)
txn.withMemo('')
const signDoc = txn.getSignDoc(pubkey)
const signature = privateKey.sign(signDoc)
const txRawBytes = txn.getTxData(signature, pubkey)
const sendTx = await client.sendTxBlockMode(txRawBytes)
return sendTx
}