{
    "version": "0.0.0",
    "name": "malloc",
    "instructions": [
        {
            "name": "initConstruction",
            "accounts": [
                {
                    "name": "construction",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "expectedNumbNodes",
                    "type": "u32"
                }
            ]
        },
        {
            "name": "addActions",
            "accounts": [
                {
                    "name": "construction",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": true
                }
            ],
            "args": [
                {
                    "name": "actions",
                    "type": {
                        "vec": {
                            "defined": "ActionNode"
                        }
                    }
                },
                {
                    "name": "dummy",
                    "type": "u32"
                }
            ]
        },
        {
            "name": "addInitInfo",
            "accounts": [
                {
                    "name": "construction",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": true
                }
            ],
            "args": [
                {
                    "name": "initActionIdx",
                    "type": {
                        "vec": "u32"
                    }
                },
                {
                    "name": "initSplits",
                    "type": {
                        "vec": "u64"
                    }
                }
            ]
        },
        {
            "name": "prepareConstruction",
            "accounts": [
                {
                    "name": "construction",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": true
                }
            ],
            "args": [
                {
                    "name": "amounts",
                    "type": {
                        "vec": "u64"
                    }
                }
            ]
        },
        {
            "name": "processAction",
            "accounts": [
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "construction",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "actionProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "actionAccounts",
                    "dummyVecIndicator": true
                }
            ],
            "args": [
                {
                    "name": "nextActionIdx",
                    "type": "u32"
                },
                {
                    "name": "data",
                    "type": "bytes"
                }
            ]
        },
        {
            "name": "closeConstruction",
            "accounts": [
                {
                    "name": "construction",
                    "accounts": [
                        {
                            "name": "construction",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "authority",
                            "isMut": false,
                            "isSigner": true
                        }
                    ]
                },
                {
                    "name": "recipient",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        }
    ],
    "accounts": [
        {
            "name": "Construction",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "authority",
                        "type": "publicKey"
                    },
                    {
                        "name": "actions",
                        "type": {
                            "vec": {
                                "defined": "ActionNode"
                            }
                        }
                    },
                    {
                        "name": "actionCalls",
                        "type": {
                            "vec": {
                                "defined": "ActionCall"
                            }
                        }
                    },
                    {
                        "name": "initActionIdx",
                        "type": {
                            "vec": "u32"
                        }
                    },
                    {
                        "name": "initSplits",
                        "type": {
                            "vec": "u64"
                        }
                    }
                ]
            }
        }
    ],
    "types": [
        {
            "name": "ActionNode",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "nextNodes",
                        "type": {
                            "vec": {
                                "vec": {
                                    "defined": "NextNode"
                                }
                            }
                        }
                    },
                    {
                        "name": "numberInputMints",
                        "type": "u32"
                    },
                    {
                        "name": "inDegree",
                        "type": "u32"
                    },
                    {
                        "name": "minOuts",
                        "type": {
                            "option": {
                                "vec": "u64"
                            }
                        }
                    },
                    {
                        "name": "inputTokenIdxs",
                        "type": {
                            "option": {
                                "vec": "u16"
                            }
                        }
                    },
                    {
                        "name": "outputTokenIdxs",
                        "type": {
                            "option": {
                                "vec": "u16"
                            }
                        }
                    },
                    {
                        "name": "actionType",
                        "type": {
                            "defined": "ActionType"
                        }
                    }
                ]
            }
        },
        {
            "name": "NextNode",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "actionIdx",
                        "type": "u32"
                    },
                    {
                        "name": "fraction",
                        "type": "u64"
                    },
                    {
                        "name": "nextInputMintIdx",
                        "type": "u32"
                    }
                ]
            }
        },
        {
            "name": "ActionCall",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "status",
                        "type": {
                            "defined": "ActionCallStatus"
                        }
                    },
                    {
                        "name": "callAmounts",
                        "type": {
                            "vec": "u64"
                        }
                    },
                    {
                        "name": "numbTimesHit",
                        "type": "u32"
                    }
                ]
            }
        },
        {
            "name": "ActionCallStatus",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "NotReady"
                    },
                    {
                        "name": "Ready"
                    },
                    {
                        "name": "Succeeded"
                    }
                ]
            }
        },
        {
            "name": "ActionType",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "MultiFungibleTokens"
                    },
                    {
                        "name": "FungibleToken"
                    },
                    {
                        "name": "NormalCpi"
                    }
                ]
            }
        }
    ],
    "errors": [
        {
            "code": 300,
            "name": "IncorrectConstructionShape",
            "msg": "Incorrect construction shape"
        },
        {
            "code": 301,
            "name": "ActionNotReadyToBeCalled",
            "msg": "Action not ready to be called"
        },
        {
            "code": 302,
            "name": "GivenTokenAccountDoesNotMatchExpected",
            "msg": "Next token does not equal the given token account"
        },
        {
            "code": 303,
            "name": "IncorrectActionResultShape",
            "msg": "Incorrect action result shape"
        },
        {
            "code": 304,
            "name": "IncorrectMinOutsShape",
            "msg": "Expected the number of min outs to be equal to the number of mint outs"
        },
        {
            "code": 305,
            "name": "IncorrectTokenInShape",
            "msg": "Expected the number of tokens in to equal the number of token accounts to check against"
        },
        {
            "code": 306,
            "name": "NumbAmountsDNENumbNodes",
            "msg": "Number of amounts does not equal number of nodes"
        },
        {
            "code": 307,
            "name": "InitActionIdxOutOfBound",
            "msg": "The given initial action index is out of bound"
        },
        {
            "code": 308,
            "name": "ReadyCallIdxListEmpty",
            "msg": "Ready call action index list is empty"
        },
        {
            "code": 309,
            "name": "NumbSplitResultAmountsDNENumbNodes",
            "msg": "Number of amounts out from calculating the split does not equal the number of nodes"
        },
        {
            "code": 310,
            "name": "CannotChangeTokenAccountAfterBeingSet",
            "msg": "Cannot change the token account of an action call after it is already set"
        },
        {
            "code": 311,
            "name": "ActionHitMoreThanAllowed",
            "msg": "Action hit more times than maximum hit allowed (i.e. the ripe amount)"
        },
        {
            "code": 312,
            "name": "ActionDidNotFindExpectedTokenAccount",
            "msg": "Action did not find the expected token account"
        },
        {
            "code": 313,
            "name": "ActionOverdrawsAllotedAmountIn",
            "msg": "Action attempts to overdraw the alloted amount in"
        },
        {
            "code": 314,
            "name": "ActionDidNotMeetMinOut",
            "msg": "Outputting action did not give the minimum set output"
        },
        {
            "code": 315,
            "name": "UnexpectedProgramBehavior",
            "msg": "Unexpected program behavior occurred"
        }
    ],
    "metadata": {
        "address": "E6ReUkQmyVKbKwJY81q9B2Zz1YmJ3gUFi6pyepNUEsEp"
    }
}
