{
    "address": "didso1Dpqpm4CsiCjzP766BGY89CAdD6ZBL68cRhFPc",
    "metadata": {
        "name": "sol_did",
        "version": "3.3.0",
        "spec": "0.1.0",
        "description": "Martin Riedel",
        "repository": "https://github.com/identity-com/sol-did"
    },
    "instructions": [
        {
            "name": "add_service",
            "discriminator": [
                133,
                207,
                106,
                32,
                91,
                111,
                153,
                30
            ],
            "accounts": [
                {
                    "name": "did_data",
                    "writable": true,
                    "pda": {
                        "seeds": [
                            {
                                "kind": "const",
                                "value": [
                                    100,
                                    105,
                                    100,
                                    45,
                                    97,
                                    99,
                                    99,
                                    111,
                                    117,
                                    110,
                                    116
                                ]
                            },
                            {
                                "kind": "account",
                                "path": "did_data.initial_verification_method.key_data",
                                "account": "DidAccount"
                            }
                        ]
                    }
                },
                {
                    "name": "authority",
                    "signer": true
                }
            ],
            "args": [
                {
                    "name": "service",
                    "type": {
                        "defined": {
                            "name": "Service"
                        }
                    }
                },
                {
                    "name": "allow_overwrite",
                    "type": "bool"
                },
                {
                    "name": "eth_signature",
                    "type": {
                        "option": {
                            "defined": {
                                "name": "Secp256k1RawSignature"
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "add_verification_method",
            "discriminator": [
                213,
                200,
                190,
                61,
                28,
                104,
                245,
                25
            ],
            "accounts": [
                {
                    "name": "did_data",
                    "writable": true,
                    "pda": {
                        "seeds": [
                            {
                                "kind": "const",
                                "value": [
                                    100,
                                    105,
                                    100,
                                    45,
                                    97,
                                    99,
                                    99,
                                    111,
                                    117,
                                    110,
                                    116
                                ]
                            },
                            {
                                "kind": "account",
                                "path": "did_data.initial_verification_method.key_data",
                                "account": "DidAccount"
                            }
                        ]
                    }
                },
                {
                    "name": "authority",
                    "signer": true
                }
            ],
            "args": [
                {
                    "name": "verification_method",
                    "type": {
                        "defined": {
                            "name": "VerificationMethod"
                        }
                    }
                },
                {
                    "name": "eth_signature",
                    "type": {
                        "option": {
                            "defined": {
                                "name": "Secp256k1RawSignature"
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "close",
            "discriminator": [
                98,
                165,
                201,
                177,
                108,
                65,
                206,
                96
            ],
            "accounts": [
                {
                    "name": "did_data",
                    "writable": true,
                    "pda": {
                        "seeds": [
                            {
                                "kind": "const",
                                "value": [
                                    100,
                                    105,
                                    100,
                                    45,
                                    97,
                                    99,
                                    99,
                                    111,
                                    117,
                                    110,
                                    116
                                ]
                            },
                            {
                                "kind": "account",
                                "path": "did_data.initial_verification_method.key_data",
                                "account": "DidAccount"
                            }
                        ]
                    }
                },
                {
                    "name": "authority",
                    "signer": true
                },
                {
                    "name": "destination",
                    "writable": true
                },
                {
                    "name": "system_program",
                    "address": "11111111111111111111111111111111"
                }
            ],
            "args": [
                {
                    "name": "eth_signature",
                    "type": {
                        "option": {
                            "defined": {
                                "name": "Secp256k1RawSignature"
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "initialize",
            "discriminator": [
                175,
                175,
                109,
                31,
                13,
                152,
                155,
                237
            ],
            "accounts": [
                {
                    "name": "did_data",
                    "writable": true,
                    "pda": {
                        "seeds": [
                            {
                                "kind": "const",
                                "value": [
                                    100,
                                    105,
                                    100,
                                    45,
                                    97,
                                    99,
                                    99,
                                    111,
                                    117,
                                    110,
                                    116
                                ]
                            },
                            {
                                "kind": "account",
                                "path": "authority"
                            }
                        ]
                    }
                },
                {
                    "name": "authority",
                    "writable": true,
                    "signer": true
                },
                {
                    "name": "payer",
                    "writable": true,
                    "signer": true
                },
                {
                    "name": "system_program",
                    "address": "11111111111111111111111111111111"
                }
            ],
            "args": [
                {
                    "name": "size",
                    "type": "u32"
                }
            ]
        },
        {
            "name": "remove_service",
            "discriminator": [
                19,
                102,
                8,
                231,
                40,
                141,
                9,
                110
            ],
            "accounts": [
                {
                    "name": "did_data",
                    "writable": true,
                    "pda": {
                        "seeds": [
                            {
                                "kind": "const",
                                "value": [
                                    100,
                                    105,
                                    100,
                                    45,
                                    97,
                                    99,
                                    99,
                                    111,
                                    117,
                                    110,
                                    116
                                ]
                            },
                            {
                                "kind": "account",
                                "path": "did_data.initial_verification_method.key_data",
                                "account": "DidAccount"
                            }
                        ]
                    }
                },
                {
                    "name": "authority",
                    "signer": true
                }
            ],
            "args": [
                {
                    "name": "fragment",
                    "type": "string"
                },
                {
                    "name": "eth_signature",
                    "type": {
                        "option": {
                            "defined": {
                                "name": "Secp256k1RawSignature"
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "remove_verification_method",
            "discriminator": [
                33,
                238,
                66,
                183,
                62,
                210,
                133,
                150
            ],
            "accounts": [
                {
                    "name": "did_data",
                    "writable": true,
                    "pda": {
                        "seeds": [
                            {
                                "kind": "const",
                                "value": [
                                    100,
                                    105,
                                    100,
                                    45,
                                    97,
                                    99,
                                    99,
                                    111,
                                    117,
                                    110,
                                    116
                                ]
                            },
                            {
                                "kind": "account",
                                "path": "did_data.initial_verification_method.key_data",
                                "account": "DidAccount"
                            }
                        ]
                    }
                },
                {
                    "name": "authority",
                    "signer": true
                }
            ],
            "args": [
                {
                    "name": "fragment",
                    "type": "string"
                },
                {
                    "name": "eth_signature",
                    "type": {
                        "option": {
                            "defined": {
                                "name": "Secp256k1RawSignature"
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "resize",
            "discriminator": [
                74,
                27,
                74,
                155,
                56,
                134,
                175,
                125
            ],
            "accounts": [
                {
                    "name": "did_data",
                    "writable": true,
                    "pda": {
                        "seeds": [
                            {
                                "kind": "const",
                                "value": [
                                    100,
                                    105,
                                    100,
                                    45,
                                    97,
                                    99,
                                    99,
                                    111,
                                    117,
                                    110,
                                    116
                                ]
                            },
                            {
                                "kind": "account",
                                "path": "did_data.initial_verification_method.key_data",
                                "account": "DidAccount"
                            }
                        ]
                    }
                },
                {
                    "name": "payer",
                    "writable": true,
                    "signer": true
                },
                {
                    "name": "authority",
                    "signer": true
                },
                {
                    "name": "system_program",
                    "address": "11111111111111111111111111111111"
                }
            ],
            "args": [
                {
                    "name": "size",
                    "type": "u32"
                },
                {
                    "name": "eth_signature",
                    "type": {
                        "option": {
                            "defined": {
                                "name": "Secp256k1RawSignature"
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "set_controllers",
            "discriminator": [
                65,
                40,
                24,
                8,
                30,
                81,
                20,
                179
            ],
            "accounts": [
                {
                    "name": "did_data",
                    "writable": true,
                    "pda": {
                        "seeds": [
                            {
                                "kind": "const",
                                "value": [
                                    100,
                                    105,
                                    100,
                                    45,
                                    97,
                                    99,
                                    99,
                                    111,
                                    117,
                                    110,
                                    116
                                ]
                            },
                            {
                                "kind": "account",
                                "path": "did_data.initial_verification_method.key_data",
                                "account": "DidAccount"
                            }
                        ]
                    }
                },
                {
                    "name": "authority",
                    "signer": true
                }
            ],
            "args": [
                {
                    "name": "set_controllers_arg",
                    "type": {
                        "defined": {
                            "name": "SetControllersArg"
                        }
                    }
                },
                {
                    "name": "eth_signature",
                    "type": {
                        "option": {
                            "defined": {
                                "name": "Secp256k1RawSignature"
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "set_vm_flags",
            "discriminator": [
                216,
                172,
                84,
                171,
                196,
                72,
                7,
                41
            ],
            "accounts": [
                {
                    "name": "did_data",
                    "writable": true,
                    "pda": {
                        "seeds": [
                            {
                                "kind": "const",
                                "value": [
                                    100,
                                    105,
                                    100,
                                    45,
                                    97,
                                    99,
                                    99,
                                    111,
                                    117,
                                    110,
                                    116
                                ]
                            },
                            {
                                "kind": "account",
                                "path": "did_data.initial_verification_method.key_data",
                                "account": "DidAccount"
                            }
                        ]
                    }
                },
                {
                    "name": "authority",
                    "signer": true
                }
            ],
            "args": [
                {
                    "name": "flags_vm",
                    "type": {
                        "defined": {
                            "name": "UpdateFlagsVerificationMethod"
                        }
                    }
                },
                {
                    "name": "eth_signature",
                    "type": {
                        "option": {
                            "defined": {
                                "name": "Secp256k1RawSignature"
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "update",
            "discriminator": [
                219,
                200,
                88,
                176,
                158,
                63,
                253,
                127
            ],
            "accounts": [
                {
                    "name": "did_data",
                    "writable": true,
                    "pda": {
                        "seeds": [
                            {
                                "kind": "const",
                                "value": [
                                    100,
                                    105,
                                    100,
                                    45,
                                    97,
                                    99,
                                    99,
                                    111,
                                    117,
                                    110,
                                    116
                                ]
                            },
                            {
                                "kind": "account",
                                "path": "did_data.initial_verification_method.key_data",
                                "account": "DidAccount"
                            }
                        ]
                    }
                },
                {
                    "name": "authority",
                    "signer": true
                }
            ],
            "args": [
                {
                    "name": "update_arg",
                    "type": {
                        "defined": {
                            "name": "UpdateArg"
                        }
                    }
                },
                {
                    "name": "eth_signature",
                    "type": {
                        "option": {
                            "defined": {
                                "name": "Secp256k1RawSignature"
                            }
                        }
                    }
                }
            ]
        }
    ],
    "accounts": [
        {
            "name": "DidAccount",
            "discriminator": [
                77,
                88,
                239,
                141,
                251,
                29,
                237,
                243
            ]
        }
    ],
    "errors": [
        {
            "code": 6000,
            "name": "VmFragmentNotFound",
            "msg": "No VM with the given fragment exists"
        },
        {
            "code": 6001,
            "name": "VmFragmentAlreadyInUse",
            "msg": "Given VM fragment is already in use"
        },
        {
            "code": 6002,
            "name": "VmGuardedFlagOnAdd",
            "msg": "Cannot add a verification method with guarded flag (OwnershipProof or Protected)"
        },
        {
            "code": 6003,
            "name": "VmCannotRemoveLastAuthority",
            "msg": "Removing the last verification method would lead to a lockout"
        },
        {
            "code": 6004,
            "name": "ServiceFragmentAlreadyInUse",
            "msg": "Service already exists in current service list"
        },
        {
            "code": 6005,
            "name": "ServiceFragmentNotFound",
            "msg": "Service doesn't exists in current service list"
        },
        {
            "code": 6006,
            "name": "InvalidOtherControllers",
            "msg": "Invalid other controllers. Invalid DID format or did:sol:<did>"
        },
        {
            "code": 6007,
            "name": "InvalidNativeControllers",
            "msg": "Invalid native controllers. Cannot set itself as a controller"
        },
        {
            "code": 6008,
            "name": "InsufficientInitialSize",
            "msg": "Initial Account size is insufficient for serialization"
        },
        {
            "code": 6009,
            "name": "ConversionError",
            "msg": "Could not convert between data types"
        },
        {
            "code": 6010,
            "name": "InvalidControllerChain",
            "msg": "Invalid chain of controlling DidAccounts"
        },
        {
            "code": 6011,
            "name": "ErrorValidatingSecp256k1Signature",
            "msg": "An error occurred while validating Secp256k1 signature"
        },
        {
            "code": 6012,
            "name": "WrongAuthorityForDid",
            "msg": "Wrong Authority for given DID"
        },
        {
            "code": 6013,
            "name": "VmCannotRemoveProtected",
            "msg": "Cannot remove a protected verification method. You need to first remove the Protected Verification Method Flag in order for this operation to succeed"
        }
    ],
    "types": [
        {
            "name": "DidAccount",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "version",
                        "docs": [
                            "Version identifier"
                        ],
                        "type": "u8"
                    },
                    {
                        "name": "bump",
                        "docs": [
                            "Bump"
                        ],
                        "type": "u8"
                    },
                    {
                        "name": "nonce",
                        "docs": [
                            "Nonce, for protecting against replay attacks around secp256k1 signatures."
                        ],
                        "type": "u64"
                    },
                    {
                        "name": "initial_verification_method",
                        "docs": [
                            "The initial authority key, automatically being added to the array of all Verification Methods."
                        ],
                        "type": {
                            "defined": {
                                "name": "VerificationMethod"
                            }
                        }
                    },
                    {
                        "name": "verification_methods",
                        "docs": [
                            "All verification methods"
                        ],
                        "type": {
                            "vec": {
                                "defined": {
                                    "name": "VerificationMethod"
                                }
                            }
                        }
                    },
                    {
                        "name": "services",
                        "docs": [
                            "Services"
                        ],
                        "type": {
                            "vec": {
                                "defined": {
                                    "name": "Service"
                                }
                            }
                        }
                    },
                    {
                        "name": "native_controllers",
                        "docs": [
                            "Controller (native) - did:sol:<controller>"
                        ],
                        "type": {
                            "vec": "pubkey"
                        }
                    },
                    {
                        "name": "other_controllers",
                        "docs": [
                            "Controller (others) - all others"
                        ],
                        "type": {
                            "vec": "string"
                        }
                    }
                ]
            }
        },
        {
            "name": "Secp256k1RawSignature",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "signature",
                        "type": {
                            "array": [
                                "u8",
                                64
                            ]
                        }
                    },
                    {
                        "name": "recovery_id",
                        "type": "u8"
                    }
                ]
            }
        },
        {
            "name": "Service",
            "docs": [
                "A Service Definition [`DidAccount`]"
            ],
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "fragment",
                        "type": "string"
                    },
                    {
                        "name": "service_type",
                        "type": "string"
                    },
                    {
                        "name": "service_endpoint",
                        "type": "string"
                    }
                ]
            }
        },
        {
            "name": "SetControllersArg",
            "docs": [
                "Argument"
            ],
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "native_controllers",
                        "type": {
                            "vec": "pubkey"
                        }
                    },
                    {
                        "name": "other_controllers",
                        "type": {
                            "vec": "string"
                        }
                    }
                ]
            }
        },
        {
            "name": "UpdateArg",
            "docs": [
                "Argument"
            ],
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "verification_methods",
                        "docs": [
                            "All verification methods"
                        ],
                        "type": {
                            "vec": {
                                "defined": {
                                    "name": "VerificationMethod"
                                }
                            }
                        }
                    },
                    {
                        "name": "services",
                        "docs": [
                            "Services"
                        ],
                        "type": {
                            "vec": {
                                "defined": {
                                    "name": "Service"
                                }
                            }
                        }
                    },
                    {
                        "name": "native_controllers",
                        "docs": [
                            "Controller (native) - did:sol:<controller>"
                        ],
                        "type": {
                            "vec": "pubkey"
                        }
                    },
                    {
                        "name": "other_controllers",
                        "docs": [
                            "Controller (others) - all others"
                        ],
                        "type": {
                            "vec": "string"
                        }
                    }
                ]
            }
        },
        {
            "name": "UpdateFlagsVerificationMethod",
            "docs": [
                "Argument"
            ],
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "fragment",
                        "type": "string"
                    },
                    {
                        "name": "flags",
                        "type": "u16"
                    }
                ]
            }
        },
        {
            "name": "VerificationMethod",
            "docs": [
                "The native authority key for a [`DidAccount`]"
            ],
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "fragment",
                        "docs": [
                            "fragment"
                        ],
                        "type": "string"
                    },
                    {
                        "name": "flags",
                        "docs": [
                            "The permissions this key has"
                        ],
                        "type": "u16"
                    },
                    {
                        "name": "method_type",
                        "docs": [
                            "The actual verification method"
                        ],
                        "type": "u8"
                    },
                    {
                        "name": "key_data",
                        "docs": [
                            "Dynamically sized key matching the given VerificationType"
                        ],
                        "type": "bytes"
                    }
                ]
            }
        }
    ]
}
