{
  "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"
  }
}