Skip to content

Commit

Permalink
Error handling + Params now being passed into generated lambda
Browse files Browse the repository at this point in the history
  • Loading branch information
ashutoshpw committed Oct 22, 2024
1 parent be948e5 commit 7bc247a
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 67 deletions.
Binary file added bun.lockb
Binary file not shown.
145 changes: 79 additions & 66 deletions src/modules/explorer/components/ArbitraryContractInteractionForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ const aciBaseLambda = {
}

const aciLambda = {
code: 'Pair {NIL operation; PUSH address "KT1T17GC91HrJ8ijZgnMaE9j4PZbojbVAn73"; CONTRACT %change_string string; ASSERT_SOME ;PUSH mutez 0;PUSH string "new string"; TRANSFER_TOKENS; CONS; SWAP; CAR; CAR; NONE address; PAIR; PAIR} 0x',
// code: 'Pair {NIL operation; PUSH address "KT1T17GC91HrJ8ijZgnMaE9j4PZbojbVAn73"; CONTRACT %change_string string; ASSERT_SOME ;PUSH mutez 0;PUSH string "new string"; TRANSFER_TOKENS; CONS; SWAP; CAR; CAR; NONE address; PAIR; PAIR} 0x',
type: `pair (lambda (pair (pair (map %handler_storage string bytes) (bytes %packed_argument)) (pair %proposal_info (address %from) (nat %frozen_token) (bytes %proposal_metadata))) (pair (pair (option %guardian address) (map %handler_storage string bytes)) (list %operations operation))) bytes`
}

Expand All @@ -64,7 +64,7 @@ async function packLambda(tezos: TezosToolkit, lambdaCode: string, lambdaType: s
}

async function prepareContractData(tezos: TezosToolkit, lambdaCode: string, lambdaType: string): Promise<string> {
console.log({ lambdaCode })
console.log("prepareContractData", { lambdaCode })

/**
* This needs to be deployed to the DAO
Expand Down Expand Up @@ -427,74 +427,87 @@ const ContractInteractionForm = ({
<SmallButtonDialog
onClick={async () => {
console.log({ formState })
// debugger
let entrypoint = formState.shape.token.initValue // accept_ownership | default etc
let taquitoParam

const execContract = formState.shape.contract
const taquitoFullParam = evalTaquitoParam(formState.shape.token, formState.shape.init)
if (execContract?.parameterSchema.isMultipleEntryPoint) {
const p = Object.entries(taquitoFullParam)
if (p.length !== 1) {
throw new Error("should only one entrypoint is selected")

try {
// debugger
let entrypoint = formState.shape.token.initValue // accept_ownership | default etc
let taquitoParam

setIsLoading(true)
// debugger
const execContract = formState.shape.contract
const taquitoFullParam = evalTaquitoParam(formState.shape.token, formState.shape)
if (execContract?.parameterSchema.isMultipleEntryPoint) {
const p = Object.entries(taquitoFullParam)
if (p.length !== 1) {
throw new Error("should only one entrypoint is selected")
}
;[entrypoint, taquitoParam] = p[0]
} else {
taquitoParam = taquitoFullParam
}
;[entrypoint, taquitoParam] = p[0]
} else {
taquitoParam = taquitoFullParam
const param = emitMicheline(
execContract?.methodsObject[entrypoint](taquitoParam).toTransferParams()?.parameter?.value
)

const micheline_type = execContract?.parameterSchema.isMultipleEntryPoint
? execContract?.entrypoints.entrypoints[entrypoint]
: execContract?.parameterSchema.root.val

// const micheline_type = values.destination_contract?.parameterSchema.isMultipleEntryPoint
// ? values.destination_contract.entrypoints.entrypoints[entrypoint]
// : values.destination_contract?.parameterSchema.root.val

const p = new Parser()
const type = emitMicheline(p.parseJSON(micheline_type), {
indent: "",
newline: ""
})

console.log("Lambda Param", param)
const lambda = generateExecuteContractMichelson("1.0.0", {
address: values.destination_contract_address,
entrypoint,
type,
amount: values.amount,
param
})

console.log("Lambda Code", lambda)
console.log("DaoDetails", daoDetails)

const finalPackedDataBytes = await prepareContractData(tezos, lambda, aciLambda.type)
const contract = await getContract(tezos, daoDetails?.data?.address as string)

console.log("DaoTokenDetails", daoDetails?.data?.token)
console.log(
"Frozen Token Params",
daoDetails?.data?.extra?.frozen_extra_value,
daoDetails?.data?.token?.decimals
)
const frozenToken = formatUnits(
daoDetails?.data?.extra?.frozen_extra_value as any,
daoDetails?.data?.token?.decimals as number
)

console.log("Frozen Token", frozenToken)

const contractMethod = contract.methods.propose(
await tezos.wallet.pkh(),
frozenToken,
finalPackedDataBytes
)

const result = await contractMethod.send()
console.log("RESULT", result)
} catch (error) {
console.log("ERROR", error)
} finally {
setIsLoading(false)
}
const param = emitMicheline(
execContract?.methodsObject[entrypoint](taquitoParam).toTransferParams()?.parameter?.value
)

const micheline_type = execContract?.parameterSchema.isMultipleEntryPoint
? execContract?.entrypoints.entrypoints[entrypoint]
: execContract?.parameterSchema.root.val

// const micheline_type = values.destination_contract?.parameterSchema.isMultipleEntryPoint
// ? values.destination_contract.entrypoints.entrypoints[entrypoint]
// : values.destination_contract?.parameterSchema.root.val

const p = new Parser()
const type = emitMicheline(p.parseJSON(micheline_type), {
indent: "",
newline: ""
})

const lambda = generateExecuteContractMichelson("1.0.0", {
address: values.destination_contract_address,
entrypoint,
type,
amount: values.amount,
param
})

console.log("Lambda Code", lambda)
console.log("DaoDetails", daoDetails)

const finalPackedDataBytes = await prepareContractData(tezos, lambda, aciLambda.type)
const contract = await getContract(tezos, daoDetails?.data?.address as string)

const frozenToken = formatUnits(
new BigNumber(daoDetails?.data?.extra?.frozen_extra_value as any),
daoDetails?.data?.token?.decimals as number
)

console.log("Frozen Token", frozenToken)

const contractMethod = contract.methods.propose(
await tezos.wallet.pkh(),
frozenToken,
finalPackedDataBytes
)

const result = await contractMethod.send()
console.log("RESULT", result)

// TODO: Deploy this to DAO
console.log({ lambda })
}}
variant="contained"
disabled={!isValid}
disabled={!isValid || isLoading}
>
Submit Form
</SmallButtonDialog>
Expand Down
16 changes: 15 additions & 1 deletion src/services/contracts/baseDAO/class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { formatUnits, xtzToMutez } from "../utils"
import { BigNumber } from "bignumber.js"
import { Token } from "models/Token"
import { Ledger } from "services/services/types"
import { Expr, Parser, packDataBytes, MichelsonType, MichelsonData } from "@taquito/michel-codec"
import { Expr, Parser, packDataBytes, MichelsonType, MichelsonData, emitMicheline } from "@taquito/michel-codec"
import { Schema } from "@taquito/michelson-encoder"

import configuration_type_michelson from "./lambdaDAO/michelson/supported_lambda_types/configuration_proposal_type.json"
Expand Down Expand Up @@ -279,6 +279,20 @@ export abstract class BaseDAO {
return packed
}

// TODO: To be Implemented
public async proposeAciExecution(tezos: TezosToolkit, micheline_type: any) {
const contract = await getContract(tezos, this.data.address)
const p = new Parser()

const type = emitMicheline(p.parseJSON(micheline_type), {
indent: "",
newline: ""
})

// const lambda_schema = p.parseMichelineExpression(aciLambda) as MichelsonType
// const lambda_schema = new Schema(lambda_schema)
}

public async proposeConfigChange(configParams: ConfigProposalParams, tezos: TezosToolkit) {
const contract = await getContract(tezos, this.data.address)
const p = new Parser()
Expand Down

0 comments on commit 7bc247a

Please sign in to comment.