Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/decentldotland/ark-protocol
The Multichain Identity Linking Protocol
https://github.com/decentldotland/ark-protocol
ark evm identity web3
Last synced: 2 months ago
JSON representation
The Multichain Identity Linking Protocol
- Host: GitHub
- URL: https://github.com/decentldotland/ark-protocol
- Owner: decentldotland
- License: mit
- Created: 2022-10-25T07:17:38.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2023-02-04T12:51:04.000Z (almost 2 years ago)
- Last Synced: 2024-04-14T10:45:35.608Z (9 months ago)
- Topics: ark, evm, identity, web3
- Language: JavaScript
- Homepage: https://ark.decent.land
- Size: 710 KB
- Stars: 4
- Watchers: 0
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
@decentdotland/ark-protocol
multi-chain identities linking protocol
## Synopsis
Ark Protocol is a protocol designed for verified multichain addresses (identities) linking. The protocol consists of an oracle contract on [Arweave](https://arweave.org) network ([EXM Protocol](https://exm.dev)) and other data registry contracts deployed on several EVM (and non-EVM chains).## Install & Run it
```sh
git clone https://github.com/decentldotland/ark-protocol.gitcd ark-network
npm install .
npm run polling
```## Build Ark EVM Contract
The repository `ark-protocol` is built with ES6 syntax, therefore building with truffle is not compatible
### 1- Create a new directory
```shmkdir ark-deploy
cd ark-deploy
truffle init
```
### 2- Copy `/contracts` directory to `ark-deploy`
```sh
cp -r ark-protocol/contracts ark-deploy```
### 3- compile & migrate
Make sure to edit `2_deploy_contract.js` to add the contract's constructor arguments inside the `/migrations` directory.```sh
truffle dev
truffle compile
truffle migrate --network ganache
```
## Integrating Ark Protocol
Check these [docs](./ark-contracts/docs/exm-ark-guide.md) to learn how to intergrate Ark Protocol in your app.## Ark Protocol Contracts
| Contract | Source Code | Deployment | Network |
| ------------- |:-------------:| :-------------: | :-------------: |
| Ark EXM Oracle | [ark-contracts/arweave](./ark-contracts/arweave/exm-ark.js) | [Z7JzRRt2iTQWV5LziNhTV6SP51tVKkCf_qrUqtlwzpg](https://api.exm.dev/read/Z7JzRRt2iTQWV5LziNhTV6SP51tVKkCf_qrUqtlwzpg) | Arweave-EXM |
| Ethereum Registry SC | [ark-contracts/EVM](./ark-contracts/EVM/identity.vy) | 0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A | [Goerli](https://goerli.etherscan.io/address/0xde44d3fb118e0f007f2c0d8fffe98b994383949a) \|\| [Mainnet](https://etherscan.io/address/0xde44d3fb118e0f007f2c0d8fffe98b994383949a) |
| Aurora Registry SC | [ark-contracts/EVM](./ark-contracts/EVM/identity.vy) | [0xfb0200C27185185D7DEe0403D5f102ADb59B7c34](https://testnet.aurorascan.dev/address/0xfb0200c27185185d7dee0403d5f102adb59b7c34) | Aurora Testnet |
| BSC Testnet Registry SC | [ark-contracts/EVM](./ark-contracts/EVM/identity.vy) | [0x90f36C4Fc09a2AD3B62Cc6F5f2BCC769aFAcB70d](https://testnet.bscscan.com/address/0x90f36c4fc09a2ad3b62cc6f5f2bcc769afacb70d) | Testnet |
| BSC Mainnet Registry SC | [ark-contracts/EVM](./ark-contracts/EVM/identity.vy) | [0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A](https://bscscan.com/address/0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A) | Mainnet |
| Avalanche Registry SC | [ark-contracts/EVM](./ark-contracts/EVM/identity.vy) | 0xE5E0A3380811aD9380F91a6996529da0a262EcD1 | [Fuji Testnet](https://testnet.snowtrace.io/address/0xe5e0a3380811ad9380f91a6996529da0a262ecd1) \|\| [C-Chain Mainnet](https://snowtrace.io/address/0xe5e0a3380811ad9380f91a6996529da0a262ecd1)|
| NEON Registry SC | [ark-contracts/EVM](./ark-contracts/EVM/identity.vy) | [0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A](https://neonscan.org/address/0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A) | NEON DEVNET |
| FTM Registry SC | [ark-contracts/EVM](./ark-contracts/EVM/identity.vy) | [0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A](https://ftmscan.com/address/0xde44d3fb118e0f007f2c0d8fffe98b994383949a) | Mainnet |
| Optimism Registry SC | [ark-contracts/EVM](./ark-contracts/EVM/identity.vy) | [0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A](https://optimistic.etherscan.io/address/0xde44d3fb118e0f007f2c0d8fffe98b994383949a) | Mainnet) |
| Arbitrum Registry SC | [ark-contracts/EVM](./ark-contracts/EVM/identity.vy) | [0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A](https://arbiscan.io/address/0xde44d3fb118e0f007f2c0d8fffe98b994383949a) | Arbitrum One |
| Polygon Registry SC | [ark-contracts/EVM](./ark-contracts/EVM/identity.vy) | [0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A](https://polygonscan.com/address/0xde44d3fb118e0f007f2c0d8fffe98b994383949a) | Mainnet |
| Near Registry SC | [ark-contracts/near](./ark-contracts/near) | [ark_station_1.near](https://explorer.near.org/accounts/ark_station_1.near) | Mainnet |
| Evmos Registry SC | [ark-contracts/EVM](./ark-contracts/EVM/identity.vy) | [0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A](https://evm.evmos.org/address/0xdE44d3fB118E0f007f2C0D8fFFE98b994383949A) | Mainnet |
| Solana Registry SC | [ark-contracts/EXM](./ark-contracts/EXM/solana/sol-registry.js) | [Wg_78ViU6IkxpKnAJGMpGlXd7u_QmCsHIo3kFGKek8M](https://api.exm.dev/read/Wg_78ViU6IkxpKnAJGMpGlXd7u_QmCsHIo3kFGKek8M) | EXM |
| Tron Registry SC | [ark-contracts/EXM](./ark-contracts/EXM/tron/trx-registry.js) | [AMCEh5wYyBfQ5Y_lxpOn6Fp_O4JqDVOPU_swvednJII](https://api.exm.dev/read/AMCEh5wYyBfQ5Y_lxpOn6Fp_O4JqDVOPU_swvednJII) | EXM |## Ark Protocol API Methods
set of public API methods for the Ark Protocol node- API endpoint (development - EXM testnet): https://ark-core.decent.land
### 1- get Arweave-EXM oracle state
- `GET /v2/oracle/state`Reponse example: return the state of the Ark EXM oracle
```json
{
"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="
]
}```
### 2- get protocol stats
- `GET /v2/protocol/stats`Response example:
```json
{"users_count": 46}```
### 3- get protocol smart contracts addresses
- `GET /v2/protocol/addresses`Reponse example: return the smart contracts addresses
```json
{
"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`
### 4- Resolve Ark addresses for a given address- `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.
### 5- get Ark profile full metadata
- `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.
### 6- SoArk: `soark` endpoint
- `GET /v2/soark/:network/:address`
Response: return user's Domain Names (NS) and NFTs
### 7- SoArk: Only Domains
- `GET /v2/domains/:network/:address`Response: return all domains owned by any verified address linked with the given identity reference (address).
### 8- SoArk: Only NFTs
- `GET /v2/allnft/:network/:address`Reponse: return EVM & NEAR NFTs owned by any verified address linked with the given identity reference (address).
### 9- soArk: Only NEAR NFTs
- `GET /v2/nep/:address`Response: return NFTs for a given NEAR address
#### N.B `compress` (bool) is a parameter that if seeded, gzip the API's response
## License
This project is licensed under the [MIT license](./LICENSE).