Init splits contract dashboard > Migrate

This commit is contained in:
Serkan Reis
2023-03-19 21:40:54 +03:00
parent d27dfbd452
commit 2e080488e3
3 changed files with 178 additions and 2 deletions
+27 -1
View File
@@ -1,11 +1,17 @@
import type { SigningCosmWasmClient } from '@cosmjs/cosmwasm-stargate'
import type { Coin } from '@cosmjs/proto-signing'
import type { logs } from '@cosmjs/stargate'
export interface InstantiateResponse {
readonly contractAddress: string
readonly transactionHash: string
}
export interface MigrateResponse {
readonly transactionHash: string
readonly logs: readonly logs.Log[]
}
export interface SplitsInstance {
readonly contractAddress: string
//Query
@@ -50,6 +56,13 @@ export interface SplitsContract {
use: (contractAddress: string) => SplitsInstance
migrate: (
senderAddress: string,
contractAddress: string,
codeId: number,
migrateMsg: Record<string, unknown>,
) => Promise<MigrateResponse>
messages: (contractAddress: string) => SplitsMessages
}
@@ -132,6 +145,19 @@ export const Splits = (client: SigningCosmWasmClient, txSigner: string): SplitsC
}
}
const migrate = async (
senderAddress: string,
contractAddress: string,
codeId: number,
migrateMsg: Record<string, unknown>,
): Promise<MigrateResponse> => {
const result = await client.migrate(senderAddress, contractAddress, codeId, migrateMsg, 'auto')
return {
transactionHash: result.transactionHash,
logs: result.logs,
}
}
const messages = (contractAddress: string) => {
const updateAdmin = (admin: string) => {
return {
@@ -161,5 +187,5 @@ export const Splits = (client: SigningCosmWasmClient, txSigner: string): SplitsC
}
}
return { use, instantiate, messages }
return { use, instantiate, migrate, messages }
}
+18 -1
View File
@@ -3,7 +3,7 @@
import { useWallet } from 'contexts/wallet'
import { useCallback, useEffect, useState } from 'react'
import type { InstantiateResponse, SplitsContract, SplitsInstance, SplitsMessages } from './contract'
import type { InstantiateResponse, MigrateResponse, SplitsContract, SplitsInstance, SplitsMessages } from './contract'
import { Splits as initContract } from './contract'
export interface UseSplitsContractProps {
@@ -14,6 +14,8 @@ export interface UseSplitsContractProps {
admin?: string,
) => Promise<InstantiateResponse>
migrate: (contractAddress: string, codeId: number, migrateMsg: Record<string, unknown>) => Promise<MigrateResponse>
use: (customAddress?: string) => SplitsInstance | undefined
updateContractAddress: (contractAddress: string) => void
@@ -53,6 +55,20 @@ export function useSplitsContract(): UseSplitsContractProps {
[splits],
)
const migrate = useCallback(
(contractAddress: string, codeId: number, migrateMsg: Record<string, unknown>): Promise<MigrateResponse> => {
return new Promise((resolve, reject) => {
if (!splits) {
reject(new Error('Contract is not initialized.'))
return
}
console.log(wallet.address, contractAddress, codeId)
splits.migrate(wallet.address, contractAddress, codeId, migrateMsg).then(resolve).catch(reject)
})
},
[splits, wallet],
)
const use = useCallback(
(customAddress = ''): SplitsInstance | undefined => {
return splits?.use(address || customAddress)
@@ -69,6 +85,7 @@ export function useSplitsContract(): UseSplitsContractProps {
return {
instantiate,
migrate,
use,
updateContractAddress,
messages,