multi-chain identities linking protocol
Ark Protocol is a protocol designed for verified multichain addresses (identities) linking. The protocol consists of an oracle contract on Arweave network (EXM Protocol) and other data registry contracts deployed on several EVM (and non-EVM chains).
git clone https://github.com/decentldotland/ark-protocol.git
cd ark-network
npm install .
npm run pollingThe repository ark-protocol is built with ES6 syntax, therefore building with truffle is not compatible
mkdir ark-deploy
cd ark-deploy
truffle init
cp -r ark-protocol/contracts ark-deploy
Make sure to edit 2_deploy_contract.js to add the contract's constructor arguments inside the /migrations directory.
truffle dev
truffle compile
truffle migrate --network ganache
Check these docs to learn how to intergrate Ark Protocol in your app.
set of public API methods for the Ark Protocol node
- API endpoint (development - EXM testnet): https://ark-core.decent.land
GET /v2/oracle/state
Reponse example: return the state of the Ark EXM oracle
{
"contract_admin": "xGx07uNnjitWsOSfKZC-ic74oXs9qDXU5QOsAis4V3tXk0krk5zUlGYu7SlZ-4xfNVA1QsHa_pOvlgE-0xGKJvMZRZYzlYcBDsnDJgLYQc5D2B2Ng4HQjLON-Gqsxl25Uj7-VSEeUgk5b2Q4SrAoVTKLWKEtuGDqwy5qKKCvNHYShYJHbmAsjQzwCwvfn2bqKv_zFUD4QeukihfDJbVyZaiev7GoE1NzTsqJ_V_eZ9tKV_5YVy-ZVU8a9dEeTnGJm2rT6z9aCcQwd9EqVYi7h8QCbKOn2r5K2NbD6V8xjQGHvODHMO0iHk2hLzcLbfDfyn_Ej-xZsHU6LBJCTeDBy_5kWtOVlYL_RH34UA1j_IYEMVDYnQBKo5laassByvkn7nODZiXesvw6TsXPYdrqrgIL7x4Td5QVK8UHXCGXOrtAlhxfzNWyjP0z5ezAsQpzGPgGI9OKgjmPIk4K6K88BoxNmJ_XFPV1DN8qZGsPSVz2N7XN9wFetDs4CMOGyDToTDEea77TsP1ykKMcXf2h-JCZlvzFEpxS_zMaRMcwV502zXN01oCR2QpUEISf_IzxQYXsjR_F75VPpUvfmDtPYf4ftQN1cZYiH68zxn74uO7DLqIa3nUXq_IrUP7SmEnbMgjzjElp0a_u62XtmgT3GQv7SBrQdzym3yhhM-3kcok",
"evm_networks": [
"AURORA-MAINNET",
"AURORA-TESTNET",
"BSC-MAINNET",
"BSC-TESTNET",
"ETH-MAINNET",
"ETH-GOERLI",
"EVMOS-MAINNET",
"NEON-DEVNET",
"AVALANCHE-MAINNET",
"FUJI-C-CHAIN",
"FTM-MAINNET",
"OPTIMISM-MAINNET",
"ARBITRUM-MAINNET",
"POLYGON-MAINNET"
],
"exotic_networks": ["NEAR-MAINNET"],
"user_sig_messages": ["my pubkey for DL ARK is: "],
"admin_sig_messages": ["DL ARK Admin pubkey of: "],
"identities": [
{
"arweave_address": "AeK_9yb3f3HEK1Gzwky6tIx8ujW9Pxr_FkhCkWftFtw",
"public_key": "sD21HRnVaS-RMrE5_qRk5tBwq2LjUjUevsZBGT2ZoIEj7U0TMfcPxpmNQ0ZRTLnIm-Y3IEX7vesZ0MqUiF7f6IZb4RTIPCkWaZdNBZWwLJIVARB0tS5W-eruTe838Zuo5Ly0N-LOaaWS5hGPKRj2LsSMbdhFvkZHnJP7TMgxmwukwtV7aBVSf6lWVpr20cQXzu9IRaKhStrJHa6VEhLH6-DzJKnqLwYNDZ7V8rIKRJsdQQFec7OOgOjdvrZ5sRnIWrgt3c0O0giW7L5lHMVKSAZowBlap5wjwbus61amfajD4wTAndZcBBZTSQ-ijToLmR4T2q3skDG4BlMcr132lgPpYDtHX4qv6Joy0Wx2XIUWCY8QsPSjcG8FpIAB3JwqM6RJkM3ipGwR8WZ-vHhUcZq7fw0K342j5R_renrQ0bDAmQhsIy3Qx-S56eRpkxcYJNzn_XbmXzbxE584DXkvNkpYlS_Z3kUccDJRgyY1Asq76kdhV6x2PzqCCIvBEXdWX5pUMU5FBt3KS9GNeYJKoQxcDxKNINomvLLkA4v_80LBAQNIPIO0yVPA3FLpyYW3MJ7Q-pwzx-tsupX6bE58EkhiGlg6j9MTl6kvEYMM7yM0AXT2MoOGL9M2lAfNr-xj1BE3CyKa-uz_6N1xrNu8ulgdi8TYCMRdlkkeb7BwsPc",
"primary_address": "0x197f818c1313dc58b32d88078ecdfb40ea822614",
"is_verified": true,
"first_linkage": 1668244496000,
"last_modification": 1668244588000,
"unevaluated_addresses": [],
"addresses": [
{
"address": "0x197f818c1313dc58b32d88078ecdfb40ea822614",
"network": "BSC-MAINNET",
"ark_key": "EVM",
"verification_req": "0xa9bf5f00cb91e9dcf5e5c441b9b7fa8fa0078f3240a568d5d960f5a5e6e2ac56",
"is_verified": true,
"is_evaluated": true
}
]
}
],
"verRequests": [
"0xa9bf5f00cb91e9dcf5e5c441b9b7fa8fa0078f3240a568d5d960f5a5e6e2ac56"
],
"signatures": [
"X2bSBgTVp3qbIh0DE+GQ9gGYYzlMsrW5lR+P9Rwt07ap9jmBJDJ+WCTLALBIZpp9ZfnxcWtdljYf0CTKZjx4bKfacPQCi2Sln3q2cj5AHpLJtVPhU76uUviGF/gzRDCQaHye1XOLWzm+z/zRxwNtburfoZxufWqbuDw8UdF+/tOoZSrP4qJ9PMvzYx5ScrsbzlW0iLHgIf2vPG5J9uqzHBOAlali8UKvmrSDdrKnO+sKvPnXV/GNEguicbTWzkgTswU2RXzzZPfip/KurOPeb/u8/nCvwwPLZ52Y9YQpUV3TVRSSdmxH5GxY1CArj76qp1sTzaKs6NVI/zDwNqwmbS5CrH82AAsKTXfxxq748676XWXLOfOR603Lebhgnp8+p7nMPT9FfMjQL6XEWUH1fskSSn436I6RQVGT52ZhiRXqEtwQttWjKxmzpuGHYqlzBSDldg3f52MD8RAQ2K+X+lKOMNFibNbfaK1QrSdrkmdRUiyIrjKjAUwQSFR6BqE544oJmPhxVpGh2XCQ0R1TCNSU0kAGrXZ9bvTpaK/1WRdIjFrXGJVjPRoTeJ2bGOeahMOyHKPDvKJLaCNtqsaTNFgiEl5XArBx9u/ddPEWVvbIzieUlUdNfWWcvs+d0tU0fBxleRBMQ16yybSKASqWFdORSRUbPc16j6z0DpWFxEw=",
"AbVGYi63mp4YjkK6xIqQ1WSOE0wRSClFX7FlnQbWhUgIOSOnzJBeEB+Pc7NKpEUtFnW8VA0YxmveE7OOzLDXvd35mpH+ON/+JUIwxIwPxMFQybri8f02vien649EoqafayuHXQc41d3WB+VKkyNn0RF+M9m1ZUPWaWbuxyDlttC3axccA96P4rZ7A+T+hsM7uB+a0S/mLhBBOUWPsD5fhsu2dRQZY4oj+kj+n31InilYN+inkQ4eat52tbG+bOqagC8rAHVOCciRYXQHoxJa3gj5etsrRPDu+2Tx/d8AJ9hmbyhWTA517O4AlMFvGcXsk7VUCqq0zit1yuXofTyEbDVyL24/XqFPGa54NnWbwyNMWiZbAvVv9CJNh6Lm4YTVAOOATiWiABkfNBA5/oRZD8F0zcuqFZ35/okatXs26BW4it7HD0M5MMNYj+IgbYSfh3BnFaEJiGTR4Uy7LtlJtubORz+cqZpmN8EjjsDp1iMyyCP1RGDYF4vZTy7xKw5pXjuWozrp6XXvPIr9lg42x+fTPT1LcONb3y4K/FXpINcEovMex1jFfPZLdo1V+I+JYyEHZzNQZxQ+lqFsV6LNsqLhtI+RT1tvkDm1bq4kEfT84BhILs0Gm7eLIx+8LCEI08PluKbYFlK/mRMlqHp2ShYh+KWSxVp98kgJqcqFQcI="
]
}
GET /v2/protocol/stats
Response example:
{"users_count": 46}
GET /v2/protocol/addresses
Reponse example: return the smart contracts addresses
{
"master_oracle": {
"addr": "Z7JzRRt2iTQWV5LziNhTV6SP51tVKkCf_qrUqtlwzpg",
"network": "exm-mainnet"
},
"eth_oracle_addr": {
"addr": "0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A",
"network": "goerli&&mainnet"
},
"aurora_oracle_addr": {
"addr": "0xfb0200C27185185D7DEe0403D5f102ADb59B7c34",
"network": "aurora-testnet"
},
"bsc_oracle_addr": {
"addr": "0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A",
"network": "bsc-mainnet"
},
"avalanche_oracle_addr": {
"addr": "0xE5E0A3380811aD9380F91a6996529da0a262EcD1",
"network": "avax-c-chain"
},
"ftm_oracle_addr": {
"addr": "0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A",
"network": "ftm-mainnet"
},
"optimism_oracle_addr": {
"addr": "0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A",
"network": "optimism-mainnet"
},
"arbitrum_oracle_addr": {
"addr": "0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A",
"network": "arbitrum-one"
},
"polygon_oracle_addr": {
"addr": "0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A",
"network": "polygon-mainnet"
},
"evmos_mainnet_addr": {
"addr": "0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A",
"network": "evmos-mainnet"
},
"near_mainnet_addr": {
"addr": "ark_station_1.near",
"network": "near-mainnet"
},
"near_testnet_ark_oracle": {
"addr": "dev-1660516310576-97373428914255",
"network": "near-testnet"
},
"solana_oracle_address": {
"addr": "Wg_78ViU6IkxpKnAJGMpGlXd7u_QmCsHIo3kFGKek8M",
"network": "exm-mainnet"
},
"tron_oracle_address": {
"addr": "AMCEh5wYyBfQ5Y_lxpOn6Fp_O4JqDVOPU_swvednJII",
"network": "exm-mainnet"
},
"neon_devnet_oracle_addr": {
"addr": "0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A",
"network": "neon-devnet"
}
}
To get the active Arweave-EXM oracle contract, always use the master_oracle from /v2/protocol/addresses
GET /v2/address/resolve/:address
address can be of any type (Arweave, EVM or Exotic). the API will return addresses and linkage requests data for the given address.
GET /v2/profile/:network/:address/:compress?
network can be either arweave, evm or exotic - and thus address should be on the equivalent network. For evm and exotic , only a verified identity having its primary_address equivalent to that address is returned.
Response: return user's Ark identity multichain metadata.
GET /v2/soark/:network/:address
Response: return user's Domain Names (NS) and NFTs
GET /v2/domains/:network/:address
Response: return all domains owned by any verified address linked with the given identity reference (address).
GET /v2/allnft/:network/:address
Reponse: return EVM & NEAR NFTs owned by any verified address linked with the given identity reference (address).
GET /v2/nep/:address
Response: return NFTs for a given NEAR address
This project is licensed under the MIT license.