{
  "methods": {
    "name": {
      "argument": "",
      "return": "token.str",
      "description": "Get name of the token",
      "entry_point": 2191741823,
      "read_only": true,
      "entry-point": "0x82a3537f",
      "read-only": true
    },
    "symbol": {
      "argument": "",
      "return": "token.str",
      "description": "Get the symbol of the token",
      "entry_point": 3077209249,
      "read_only": true,
      "entry-point": "0xb76a7ca1",
      "read-only": true
    },
    "decimals": {
      "argument": "",
      "return": "token.uint32",
      "description": "Get the decimals of the token",
      "entry_point": 4001430831,
      "read_only": true,
      "entry-point": "0xee80fd2f",
      "read-only": true
    },
    "get_info": {
      "argument": "",
      "return": "token.info",
      "description": "Get name, symbol and decimals",
      "entry_point": 3179243600,
      "read_only": true,
      "entry-point": "0xbd7f6850",
      "read-only": true
    },
    "total_supply": {
      "argument": "",
      "return": "token.uint64",
      "description": "Get total supply",
      "entry_point": 2967091508,
      "read_only": true,
      "entry-point": "0xb0da3934",
      "read-only": true
    },
    "balance_of": {
      "argument": "token.balance_of_args",
      "return": "token.uint64",
      "description": "Get balance of an account",
      "entry_point": 1550980247,
      "read_only": true,
      "entry-point": "0x5c721497",
      "read-only": true
    },
    "allowance": {
      "argument": "token.allowance_args",
      "return": "token.uint64",
      "description": "Get allowance",
      "entry_point": 854630305,
      "read_only": true,
      "entry-point": "0x32f09fa1",
      "read-only": true
    },
    "get_allowances": {
      "argument": "token.get_allowances_args",
      "return": "token.get_allowances_return",
      "description": "Get allowances of an account",
      "entry_point": 2409718870,
      "read_only": true,
      "entry-point": "0x8fa16456",
      "read-only": true
    },
    "approve": {
      "argument": "token.approve_args",
      "return": "",
      "description": "Grant permissions to other account to manage the tokens owned by the user. The user must approve only the accounts he trust.",
      "entry_point": 1960973952,
      "read_only": false,
      "entry-point": "0x74e21680",
      "read-only": false
    },
    "transfer": {
      "argument": "token.transfer_args",
      "return": "",
      "description": "Transfer tokens",
      "entry_point": 670398154,
      "read_only": false,
      "entry-point": "0x27f576ca",
      "read-only": false
    },
    "mint": {
      "argument": "token.mint_args",
      "return": "",
      "description": "Mint new tokens",
      "entry_point": 3698268091,
      "read_only": false,
      "entry-point": "0xdc6f17bb",
      "read-only": false
    }
  },
  "types": "CpoICiJrb2lub3MvY29udHJhY3RzL3Rva2VuL3Rva2VuLnByb3RvEhZrb2lub3MuY29udHJhY3RzLnRva2VuGhRrb2lub3Mvb3B0aW9ucy5wcm90byIQCg5uYW1lX2FyZ3VtZW50cyIjCgtuYW1lX3Jlc3VsdBIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUiEgoQc3ltYm9sX2FyZ3VtZW50cyIlCg1zeW1ib2xfcmVzdWx0EhQKBXZhbHVlGAEgASgJUgV2YWx1ZSIUChJkZWNpbWFsc19hcmd1bWVudHMiJwoPZGVjaW1hbHNfcmVzdWx0EhQKBXZhbHVlGAEgASgNUgV2YWx1ZSIYChZ0b3RhbF9zdXBwbHlfYXJndW1lbnRzIi8KE3RvdGFsX3N1cHBseV9yZXN1bHQSGAoFdmFsdWUYASABKARCAjABUgV2YWx1ZSIyChRiYWxhbmNlX29mX2FyZ3VtZW50cxIaCgVvd25lchgBIAEoDEIEgLUYBlIFb3duZXIiLQoRYmFsYW5jZV9vZl9yZXN1bHQSGAoFdmFsdWUYASABKARCAjABUgV2YWx1ZSJeChJ0cmFuc2Zlcl9hcmd1bWVudHMSGAoEZnJvbRgBIAEoDEIEgLUYBlIEZnJvbRIUCgJ0bxgCIAEoDEIEgLUYBlICdG8SGAoFdmFsdWUYAyABKARCAjABUgV2YWx1ZSIRCg90cmFuc2Zlcl9yZXN1bHQiQAoObWludF9hcmd1bWVudHMSFAoCdG8YASABKAxCBIC1GAZSAnRvEhgKBXZhbHVlGAIgASgEQgIwAVIFdmFsdWUiDQoLbWludF9yZXN1bHQiRAoOYnVybl9hcmd1bWVudHMSGAoEZnJvbRgBIAEoDEIEgLUYBlIEZnJvbRIYCgV2YWx1ZRgCIAEoBEICMAFSBXZhbHVlIg0KC2J1cm5fcmVzdWx0IioKDmJhbGFuY2Vfb2JqZWN0EhgKBXZhbHVlGAEgASgEQgIwAVIFdmFsdWUiQAoKYnVybl9ldmVudBIYCgRmcm9tGAEgASgMQgSAtRgGUgRmcm9tEhgKBXZhbHVlGAIgASgEQgIwAVIFdmFsdWUiPAoKbWludF9ldmVudBIUCgJ0bxgBIAEoDEIEgLUYBlICdG8SGAoFdmFsdWUYAiABKARCAjABUgV2YWx1ZSJaCg50cmFuc2Zl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",
  "koilib_types": {
    "nested": {
      "koinos": {
        "options": {
          "go_package": "github.com/koinos/koinos-proto-golang/koinos"
        },
        "nested": {
          "contracts": {
            "nested": {
              "token": {
                "options": {
                  "go_package": "github.com/koinos/koinos-proto-golang/koinos/contracts/token"
                },
                "nested": {
                  "name_arguments": {
                    "fields": {}
                  },
                  "name_result": {
                    "fields": {
                      "value": {
                        "type": "string",
                        "id": 1
                      }
                    }
                  },
                  "symbol_arguments": {
                    "fields": {}
                  },
                  "symbol_result": {
                    "fields": {
                      "value": {
                        "type": "string",
                        "id": 1
                      }
                    }
                  },
                  "decimals_arguments": {
                    "fields": {}
                  },
                  "decimals_result": {
                    "fields": {
                      "value": {
                        "type": "uint32",
                        "id": 1
                      }
                    }
                  },
                  "total_supply_arguments": {
                    "fields": {}
                  },
                  "total_supply_result": {
                    "fields": {
                      "value": {
                        "type": "uint64",
                        "id": 1,
                        "options": {
                          "jstype": "JS_STRING"
                        }
                      }
                    }
                  },
                  "balance_of_arguments": {
                    "fields": {
                      "owner": {
                        "type": "bytes",
                        "id": 1,
                        "options": {
                          "(btype)": "ADDRESS"
                        }
                      }
                    }
                  },
                  "balance_of_result": {
                    "fields": {
                      "value": {
                        "type": "uint64",
                        "id": 1,
                        "options": {
                          "jstype": "JS_STRING"
                        }
                      }
                    }
                  },
                  "transfer_arguments": {
                    "fields": {
                      "from": {
                        "type": "bytes",
                        "id": 1,
                        "options": {
                          "(btype)": "ADDRESS"
                        }
                      },
                      "to": {
                        "type": "bytes",
                        "id": 2,
                        "options": {
                          "(btype)": "ADDRESS"
                        }
                      },
                      "value": {
                        "type": "uint64",
                        "id": 3,
                        "options": {
                          "jstype": "JS_STRING"
                        }
                      }
                    }
                  },
                  "transfer_result": {
                    "fields": {}
                  },
                  "mint_arguments": {
                    "fields": {
                      "to": {
                        "type": "bytes",
                        "id": 1,
                        "options": {
                          "(btype)": "ADDRESS"
                        }
                      },
                      "value": {
                        "type": "uint64",
                        "id": 2,
                        "options": {
                          "jstype": "JS_STRING"
                        }
                      }
                    }
                  },
                  "mint_result": {
                    "fields": {}
                  },
                  "burn_arguments": {
                    "fields": {
                      "from": {
                        "type": "bytes",
                        "id": 1,
                        "options": {
                          "(btype)": "ADDRESS"
                        }
                      },
                      "value": {
                        "type": "uint64",
                        "id": 2,
                        "options": {
                          "jstype": "JS_STRING"
                        }
                      }
                    }
                  },
                  "burn_result": {
                    "fields": {}
                  },
                  "balance_object": {
                    "fields": {
                      "value": {
                        "type": "uint64",
                        "id": 1,
                        "options": {
                          "jstype": "JS_STRING"
                        }
                      }
                    }
                  },
                  "burn_event": {
                    "fields": {
                      "from": {
                        "type": "bytes",
                        "id": 1,
                        "options": {
                          "(btype)": "ADDRESS"
                        }
                      },
                      "value": {
                        "type": "uint64",
                        "id": 2,
                        "options": {
                          "jstype": "JS_STRING"
                        }
                      }
                    }
                  },
                  "mint_event": {
                    "fields": {
                      "to": {
                        "type": "bytes",
                        "id": 1,
                        "options": {
                          "(btype)": "ADDRESS"
                        }
                      },
                      "value": {
                        "type": "uint64",
                        "id": 2,
                        "options": {
                          "jstype": "JS_STRING"
                        }
                      }
                    }
                  },
                  "transfer_event": {
                    "fields": {
                      "from": {
                        "type": "bytes",
                        "id": 1,
                        "options": {
                          "(btype)": "ADDRESS"
                        }
                      },
                      "to": {
                        "type": "bytes",
                        "id": 2,
                        "options": {
                          "(btype)": "ADDRESS"
                        }
                      },
                      "value": {
                        "type": "uint64",
                        "id": 3,
                        "options": {
                          "jstype": "JS_STRING"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "bytes_type": {
            "values": {
              "BASE64": 0,
              "BASE58": 1,
              "HEX": 2,
              "BLOCK_ID": 3,
              "TRANSACTION_ID": 4,
              "CONTRACT_ID": 5,
              "ADDRESS": 6
            }
          },
          "_btype": {
            "oneof": [
              "btype"
            ]
          },
          "btype": {
            "type": "bytes_type",
            "id": 50000,
            "extend": "google.protobuf.FieldOptions",
            "options": {
              "proto3_optional": true
            }
          }
        }
      },
      "token": {
        "nested": {
          "str": {
            "fields": {
              "value": {
                "type": "string",
                "id": 1
              }
            }
          },
          "uint32": {
            "fields": {
              "value": {
                "type": "uint32",
                "id": 1
              }
            }
          },
          "uint64": {
            "fields": {
              "value": {
                "type": "uint64",
                "id": 1,
                "options": {
                  "jstype": "JS_STRING"
                }
              }
            }
          },
          "boole": {
            "fields": {
              "value": {
                "type": "bool",
                "id": 1
              }
            }
          },
          "info": {
            "fields": {
              "name": {
                "type": "string",
                "id": 1
              },
              "symbol": {
                "type": "string",
                "id": 2
              },
              "decimals": {
                "type": "uint32",
                "id": 3
              },
              "description": {
                "type": "string",
                "id": 4
              }
            }
          },
          "balance_of_args": {
            "fields": {
              "owner": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              }
            }
          },
          "transfer_args": {
            "fields": {
              "from": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "to": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "value": {
                "type": "uint64",
                "id": 3,
                "options": {
                  "jstype": "JS_STRING"
                }
              },
              "memo": {
                "type": "string",
                "id": 4
              }
            }
          },
          "mint_args": {
            "fields": {
              "to": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "value": {
                "type": "uint64",
                "id": 2,
                "options": {
                  "jstype": "JS_STRING"
                }
              }
            }
          },
          "burn_args": {
            "fields": {
              "from": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "value": {
                "type": "uint64",
                "id": 2,
                "options": {
                  "jstype": "JS_STRING"
                }
              }
            }
          },
          "approve_args": {
            "fields": {
              "owner": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "spender": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "value": {
                "type": "uint64",
                "id": 3,
                "options": {
                  "jstype": "JS_STRING"
                }
              }
            }
          },
          "allowance_args": {
            "fields": {
              "owner": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "spender": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              }
            }
          },
          "get_allowances_args": {
            "fields": {
              "owner": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "start": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "limit": {
                "type": "int32",
                "id": 3
              },
              "descending": {
                "type": "bool",
                "id": 4
              }
            }
          },
          "spender_value": {
            "fields": {
              "spender": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "value": {
                "type": "uint64",
                "id": 2,
                "options": {
                  "jstype": "JS_STRING"
                }
              }
            }
          },
          "get_allowances_return": {
            "fields": {
              "owner": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "allowances": {
                "rule": "repeated",
                "type": "spender_value",
                "id": 2
              }
            }
          },
          "transfer_event": {
            "fields": {
              "from": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "to": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "value": {
                "type": "uint64",
                "id": 3,
                "options": {
                  "jstype": "JS_STRING"
                }
              }
            }
          },
          "mint_event": {
            "fields": {
              "to": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "value": {
                "type": "uint64",
                "id": 2,
                "options": {
                  "jstype": "JS_STRING"
                }
              }
            }
          },
          "burn_event": {
            "fields": {
              "from": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "value": {
                "type": "uint64",
                "id": 2,
                "options": {
                  "jstype": "JS_STRING"
                }
              }
            }
          },
          "approve_event": {
            "fields": {
              "owner": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "spender": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "value": {
                "type": "uint64",
                "id": 3,
                "options": {
                  "jstype": "JS_STRING"
                }
              }
            }
          }
        }
      }
    }
  },
  "events": {
    "token.approve_event": {
      "type": "token.approve_args",
      "argument": "token.approve_args"
    },
    "token.transfer_event": {
      "type": "token.transfer_args",
      "argument": "token.transfer_args"
    },
    "token.mint_event": {
      "type": "token.mint_args",
      "argument": "token.mint_args"
    }
  }
}