{
  "methods": {
    "name": {
      "argument": "",
      "return": "common.str",
      "description": "Get name of the NFT",
      "entry_point": 2191741823,
      "read_only": true,
      "entry-point": "0x82a3537f",
      "read-only": true
    },
    "symbol": {
      "argument": "",
      "return": "common.str",
      "description": "Get the symbol of the NFT",
      "entry_point": 3077209249,
      "read_only": true,
      "entry-point": "0xb76a7ca1",
      "read-only": true
    },
    "uri": {
      "argument": "",
      "return": "common.str",
      "description": "Get URI of the NFT",
      "entry_point": 1894111158,
      "read_only": true,
      "entry-point": "0x70e5d7b6",
      "read-only": true
    },
    "get_info": {
      "argument": "",
      "return": "nft.info",
      "description": "Get name, symbol and decimals",
      "entry_point": 3179243600,
      "read_only": true,
      "entry-point": "0xbd7f6850",
      "read-only": true
    },
    "owner": {
      "argument": "",
      "return": "common.address",
      "description": "Get the owner of the collection",
      "entry_point": 1276127593,
      "read_only": true,
      "entry-point": "0x4c102969",
      "read-only": true
    },
    "total_supply": {
      "argument": "",
      "return": "common.uint64",
      "description": "Get total supply",
      "entry_point": 2967091508,
      "read_only": true,
      "entry-point": "0xb0da3934",
      "read-only": true
    },
    "royalties": {
      "argument": "",
      "return": "nft.royalties",
      "description": "Get royalties",
      "entry_point": 921242832,
      "read_only": true,
      "entry-point": "0x36e90cd0",
      "read-only": true
    },
    "balance_of": {
      "argument": "nft.balance_of_args",
      "return": "common.uint64",
      "description": "Get balance of an account",
      "entry_point": 1550980247,
      "read_only": true,
      "entry-point": "0x5c721497",
      "read-only": true
    },
    "owner_of": {
      "argument": "nft.token",
      "return": "common.address",
      "description": "Get the owner of a token",
      "entry_point": 3982608455,
      "read_only": true,
      "entry-point": "0xed61c847",
      "read-only": true
    },
    "metadata_of": {
      "argument": "nft.token",
      "return": "common.str",
      "description": "Get the metadata of a token",
      "entry_point": 392990591,
      "read_only": true,
      "entry-point": "0x176c8f7f",
      "read-only": true
    },
    "get_tokens": {
      "argument": "nft.get_tokens_args",
      "return": "nft.token_ids",
      "description": "Get list of token IDs",
      "entry_point": 2103140055,
      "read_only": true,
      "entry-point": "0x7d5b5ed7",
      "read-only": true
    },
    "get_tokens_by_owner": {
      "argument": "nft.get_tokens_by_owner_args",
      "return": "nft.token_ids",
      "description": "Get tokens owned by an address",
      "entry_point": 4229163893,
      "read_only": true,
      "entry-point": "0xfc13eb75",
      "read-only": true
    },
    "get_approved": {
      "argument": "nft.token",
      "return": "common.address",
      "description": "Check if an account is approved to operate a token ID",
      "entry_point": 1282609184,
      "read_only": true,
      "entry-point": "0x4c731020",
      "read-only": true
    },
    "is_approved_for_all": {
      "argument": "nft.is_approved_for_all_args",
      "return": "common.boole",
      "description": "Check if an account is approved to operate all tokens owned by other account",
      "entry_point": 3886779621,
      "read_only": true,
      "entry-point": "0xe7ab8ce5",
      "read-only": true
    },
    "get_operator_approvals": {
      "argument": "nft.get_operators_args",
      "return": "nft.get_operators_return",
      "description": "Get allowances of an account",
      "entry_point": 3676042766,
      "read_only": true,
      "entry-point": "0xdb1bf60e",
      "read-only": true
    },
    "transfer_ownership": {
      "argument": "common.address",
      "return": "",
      "description": "Transfer ownership of the collection",
      "entry_point": 961275650,
      "read_only": false,
      "entry-point": "0x394be702",
      "read-only": false
    },
    "set_royalties": {
      "argument": "nft.royalties",
      "return": "",
      "description": "Set royalties",
      "entry_point": 995865963,
      "read_only": false,
      "entry-point": "0x3b5bb56b",
      "read-only": false
    },
    "set_metadata": {
      "argument": "nft.metadata_args",
      "return": "",
      "description": "Set metadata",
      "entry_point": 1029287705,
      "read_only": false,
      "entry-point": "0x3d59af19",
      "read-only": false
    },
    "approve": {
      "argument": "nft.approve_args",
      "return": "",
      "description": "Grant permissions to other account to manage a specific Token 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
    },
    "set_approval_for_all": {
      "argument": "nft.set_approval_for_all_args",
      "return": "",
      "description": "Grant permissions to other account to manage all Tokens owned by the user. The user must approve only the accounts he trust.",
      "entry_point": 541336086,
      "read_only": false,
      "entry-point": "0x20442216",
      "read-only": false
    },
    "transfer": {
      "argument": "nft.transfer_args",
      "return": "",
      "description": "Transfer NFT",
      "entry_point": 670398154,
      "read_only": false,
      "entry-point": "0x27f576ca",
      "read-only": false
    },
    "mint": {
      "argument": "nft.mint_args",
      "return": "",
      "description": "Mint NFT",
      "entry_point": 3698268091,
      "read_only": false,
      "entry-point": "0xdc6f17bb",
      "read-only": false
    }
  },
  "types": "CoQDCidrb2lub3Nib3gtcHJvdG8vbWFuYXNoYXJlci9jb21tb24ucHJvdG8SBmNvbW1vbhoUa29pbm9zL29wdGlvbnMucHJvdG8iGwoDc3RyEhQKBXZhbHVlGAEgASgJUgV2YWx1ZSIeCgZ1aW50MzISFAoFdmFsdWUYASABKA1SBXZhbHVlIiIKBnVpbnQ2NBIYCgV2YWx1ZRgBIAEoBEICMAFSBXZhbHVlIh0KBWJvb2xlEhQKBXZhbHVlGAEgASgIUgV2YWx1ZSIlCgdhZGRyZXNzEhoKBXZhbHVlGAEgASgMQgSAtRgGUgV2YWx1ZSJdCglsaXN0X2FyZ3MSGgoFc3RhcnQYASABKAxCBIC1GAZSBXN0YXJ0EhQKBWxpbWl0GAIgASgFUgVsaW1pdBIeCgpkZXNjZW5kaW5nGAMgASgIUgpkZXNjZW5kaW5nIi0KCWFkZHJlc3NlcxIgCghhY2NvdW50cxgBIAMoDEIEgLUYBlIIYWNjb3VudHNiBnByb3RvMwqQDAoJbmZ0LnByb3RvEgNuZnQaFGtvaW5vcy9vcHRpb25zLnByb3RvIk0KB3JveWFsdHkSIgoKcGVyY2VudGFnZRgBIAEoBEICMAFSCnBlcmNlbnRhZ2USHgoHYWRkcmVzcxgCIAEoDEIEgLUYBlIHYWRkcmVzcyIvCglyb3lhbHRpZXMSIgoFdmFsdWUYASADKAsyDC5uZnQucm95YWx0eVIFdmFsdWUiTAoNbWV0YWRhdGFfYXJncxIfCgh0b2tlbl9pZBgBIAEoDEIEgLUYAlIHdG9rZW5JZBIaCghtZXRhZGF0YRgCIAEoCVIIbWV0YWRhdGEiZgoEaW5mbxISCgRuYW1lGAEgASgJUgRuYW1lEhYKBnN5bWJvbBgCIAEoCVIGc3ltYm9sEhAKA3VyaRgDIAEoCVIDdXJpEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbiItCg9iYWxhbmNlX29mX2FyZ3MSGgoFb3duZXIYASABKAxCBIC1GAZSBW93bmVyIigKBXRva2VuEh8KCHRva2VuX2lkGAEgASgMQgSAtRgCUgd0b2tlbklkIlgKGGlzX2FwcHJvdmVkX2Zvcl9hbGxfYXJncxIaCgVvd25lchgBIAEoDEIEgLUYBlIFb3duZXISIAoIb3BlcmF0b3IYAiABKAxCBIC1GAZSCG9wZXJhdG9yIkIKCW1pbnRfYXJncxIUCgJ0bxgBIAEoDEIEgLUYBlICdG8SHwoIdG9rZW5faWQYAiABKAxCBIC1GAJSB3Rva2VuSWQiLAoJYnVybl9hcmdzEh8KCHRva2VuX2lkGAEgASgMQgSAtRgCUgd0b2tlbklkInQKDXRyYW5zZmVyX2FyZ3MSGAoEZnJvbRgBIAEoDEIEgLUYBlIEZnJvbRIUCgJ0bxgCIAEoDEIEgLUYBlICdG8SHwoIdG9rZW5faWQYAyABKAxCBIC1GAJSB3Rva2VuSWQSEgoEbWVtbxgEIAEoCVIEbWVtbyJ2CgxhcHByb3ZlX2FyZ3MSLwoQYXBwcm92ZXJfYWRkcmVzcxgBIAEoDEIEgLUYBlIPYXBwcm92ZXJBZGRyZXNzEhQKAnRvGAIgASgMQgSAtRgGUgJ0bxIfCgh0b2tlbl9pZBgDIAEoDEIEgLUYAlIHdG9rZW5JZCKZAQoZc2V0X2FwcHJvdmFsX2Zvcl9hbGxfYXJncxIvChBhcHByb3Zlcl9hZGRyZXNzGAEgASgMQgSAtRgGUg9hcHByb3ZlckFkZHJlc3MSLwoQb3BlcmF0b3JfYWRkcmVzcxgCIAEoDEIEgLUYBlIPb3BlcmF0b3JBZGRyZXNzEhoKCGFwcHJvdmVkGAMgASgIUghhcHByb3ZlZCKCAQoSZ2V0X29wZXJhdG9yc19hcmdzEhoKBW93bmVyGAEgASgMQgSAtRgGUgVvd25lchIaCgVzdGFydBgCIAEoDEIEgLUYBlIFc3RhcnQSFAoFbGltaXQYAyABKAVSBWxpbWl0Eh4KCmRlc2NlbmRpbmcYBCABKAhSCmRlc2NlbmRpbmciVgoUZ2V0X29wZXJhdG9yc19yZXR1cm4SGgoFb3duZXIYASABKAxCBIC1GAZSBW93bmVyEiIKCW9wZXJhdG9ycxgCIAMoDEIEgLUYBlIJb3BlcmF0b3JzImMKD2dldF90b2tlbnNfYXJncxIaCgVzdGFydBgBIAEoDEIEgLUYAlIFc3RhcnQSFAoFbGltaXQYAiABKAVSBWxpbWl0Eh4KCmRlc2NlbmRpbmcYAyABKAhSCmRlc2NlbmRpbmciiAEKGGdldF90b2tlbnNfYnlfb3duZXJfYXJncxIaCgVvd25lchgBIAEoDEIEgLUYBlIFb3duZXISGgoFc3RhcnQYAiABKAxCBIC1GAJSBXN0YXJ0EhQKBWxpbWl0GAMgASgFUgVsaW1pdBIeCgpkZXNjZW5kaW5nGAQgASgIUgpkZXNjZW5kaW5nIi4KCXRva2VuX2lkcxIhCgl0b2tlbl9pZHMYASADKAxCBIC1GAJSCHRva2VuSWRzYgZwcm90bzM=",
  "koilib_types": {
    "nested": {
      "common": {
        "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
              }
            }
          },
          "address": {
            "fields": {
              "value": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              }
            }
          },
          "list_args": {
            "fields": {
              "start": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "limit": {
                "type": "int32",
                "id": 2
              },
              "descending": {
                "type": "bool",
                "id": 3
              }
            }
          },
          "addresses": {
            "fields": {
              "accounts": {
                "rule": "repeated",
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              }
            }
          }
        }
      },
      "koinos": {
        "options": {
          "go_package": "github.com/koinos/koinos-proto-golang/koinos"
        },
        "nested": {
          "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
            }
          }
        }
      },
      "nft": {
        "nested": {
          "royalty": {
            "fields": {
              "percentage": {
                "type": "uint64",
                "id": 1,
                "options": {
                  "jstype": "JS_STRING"
                }
              },
              "address": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              }
            }
          },
          "royalties": {
            "fields": {
              "value": {
                "rule": "repeated",
                "type": "royalty",
                "id": 1
              }
            }
          },
          "metadata_args": {
            "fields": {
              "token_id": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "HEX"
                }
              },
              "metadata": {
                "type": "string",
                "id": 2
              }
            }
          },
          "info": {
            "fields": {
              "name": {
                "type": "string",
                "id": 1
              },
              "symbol": {
                "type": "string",
                "id": 2
              },
              "uri": {
                "type": "string",
                "id": 3
              },
              "description": {
                "type": "string",
                "id": 4
              }
            }
          },
          "balance_of_args": {
            "fields": {
              "owner": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              }
            }
          },
          "token": {
            "fields": {
              "token_id": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "HEX"
                }
              }
            }
          },
          "is_approved_for_all_args": {
            "fields": {
              "owner": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "operator": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              }
            }
          },
          "mint_args": {
            "fields": {
              "to": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "token_id": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "HEX"
                }
              }
            }
          },
          "burn_args": {
            "fields": {
              "token_id": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "HEX"
                }
              }
            }
          },
          "transfer_args": {
            "fields": {
              "from": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "to": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "token_id": {
                "type": "bytes",
                "id": 3,
                "options": {
                  "(koinos.btype)": "HEX"
                }
              },
              "memo": {
                "type": "string",
                "id": 4
              }
            }
          },
          "approve_args": {
            "fields": {
              "approver_address": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "to": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "token_id": {
                "type": "bytes",
                "id": 3,
                "options": {
                  "(koinos.btype)": "HEX"
                }
              }
            }
          },
          "set_approval_for_all_args": {
            "fields": {
              "approver_address": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "operator_address": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "approved": {
                "type": "bool",
                "id": 3
              }
            }
          },
          "get_operators_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
              }
            }
          },
          "get_operators_return": {
            "fields": {
              "owner": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "operators": {
                "rule": "repeated",
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              }
            }
          },
          "get_tokens_args": {
            "fields": {
              "start": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "HEX"
                }
              },
              "limit": {
                "type": "int32",
                "id": 2
              },
              "descending": {
                "type": "bool",
                "id": 3
              }
            }
          },
          "get_tokens_by_owner_args": {
            "fields": {
              "owner": {
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "ADDRESS"
                }
              },
              "start": {
                "type": "bytes",
                "id": 2,
                "options": {
                  "(koinos.btype)": "HEX"
                }
              },
              "limit": {
                "type": "int32",
                "id": 3
              },
              "descending": {
                "type": "bool",
                "id": 4
              }
            }
          },
          "token_ids": {
            "fields": {
              "token_ids": {
                "rule": "repeated",
                "type": "bytes",
                "id": 1,
                "options": {
                  "(koinos.btype)": "HEX"
                }
              }
            }
          }
        }
      }
    }
  },
  "events": {
    "collections.owner_event": {
      "type": "common.address",
      "argument": "common.address"
    },
    "collections.royalties_event": {
      "type": "nft.royalties",
      "argument": "nft.royalties"
    },
    "collections.set_metadata_event": {
      "type": "nft.metadata_args",
      "argument": "nft.metadata_args"
    },
    "collections.token_approval_event": {
      "type": "nft.approve_args",
      "argument": "nft.approve_args"
    },
    "collections.operator_approval_event": {
      "type": "nft.set_approval_for_all_args",
      "argument": "nft.set_approval_for_all_args"
    },
    "collections.transfer_event": {
      "type": "nft.transfer_args",
      "argument": "nft.transfer_args"
    },
    "collections.mint_event": {
      "type": "nft.mint_args",
      "argument": "nft.mint_args"
    }
  }
}