Contract repository
The source code of the interfaces, requirements and implementation for ONCHAINID can be found in the https://github.com/onchain-id/solidity repository.
The contracts are also compiled and published as the @onchain-id/solidity on NPM and Github Registry.
Get started
- Clone the repository
git clone git@github.com:onchain-id/solidity.git - Install tooling with
npm install
Setup
noteMake sure you ran
npm installbefore running any of the commands below.
By default, almost all commands will run against a local ephemeral network started by Hardhat. This means running deploy scripts won't persist. It is instead possible to configure Hardhat to target an existing network (like testnets) or to start a persistent node. Refer to the hardhat documentation for more details.
To start a local network managed by Hardhat (using the tooling provided, this comes bundled with debugging utilities):
npx hardhat node
To use an existing network (for instance a testnet), update the hardat.config.ts file:
const config: HardhatUserConfig = {
//...
networks: {
myNetwork: {
url: "https://my-rpc.onchainid.xyz",
accounts: [PRIVATE_KEY_1, PRIVATE_KEY_2],
},
},
};
The accounts property can contain the private keys to use for the network. Each script has its own order, but in general, the first one will be the address used to deploy contracts.
Instead of declaring private keys, you may also leave it empty and use the node as a signer (e.g. Geth Clef).
Scripts and tasks
The repository contains a number of scripts and tasks to help with development and testing. But these scripts can also be used to deploy contracts and interact with them.
Deploy scripts
There are scripts to:
- Deploy a standalone identity contract.
- Deploy a factory suite (factory, implementation authority, library contracts).
- Deploy a claim issuer contract.
Deploy a standalone identity
npx hardhat run scripts/deploy-identity.ts --network <myNetwork/localhost>
Deploy a factory suite
npx hardhat run scripts/deploy-factory.ts --network <myNetwork/localhost>
Deploy a claim issuer
npx hardhat run scripts/deploy-claim-issuer.ts --network <myNetwork/localhost>
Interaction tasks
There are tasks to:
- Modify keys on an identity.
- Add and remove claims on an identity.
- Revoke a claim on a Claim Issuer.
- Deploy an identity as a proxy using a factory.
Add a purpose to a key on an identity
npx hardhat add-key --identity <identity address> --from <identity MANAGEMENT key> --key <key> --type <key type> --purpose <purpose> --network <myNetwork/localhost>
identity addressis the address of the identity contract.identity MANAGEMENT keyis the address of a MANAGEMENT key on the identity (will emit the transaction and pay gas).keyis the key to add (ethereum address).key typeis the type of the key to add (use standard-defined type or custom one, should probably be ECDSA = 1).purposeis the purpose of the key to add (integer) (MANAGEMENT = 1, CLAIM = 2, EXECUTE = 3).
Remove a purpose from a key on an identity
npx hardhat remove-key --identity <identity address> --from <identity MANAGEMENT key> --key <key> --type <key type> --purpose <purpose> --network <myNetwork/localhost>
identity addressis the address of the identity contract.identity MANAGEMENT keyis the address of a MANAGEMENT key on the identity (will emit the transaction and pay gas).keyis the key to add (ethereum address).key typeis the type of the key to remove (use standard-defined type or custom one, should probably be ECDSA = 1).purposeis the purpose of the key to remove (integer) (MANAGEMENT = 1, CLAIM = 2, EXECUTE = 3).
Add a claim on an identity
npx hardhat add-claim --identity <identity address> --from <identity CLAIM key> --claim <claim as JSON> --network <myNetwork/localhost>
identity addressis the address of the identity contract.identity CLAIM keyis the address of a CLAIM (OR MANAGEMENT) key on the identity (will emit the transaction and pay gas).claimis the claim to add as a JSON string.claim.topicis the claim topic (use standard-defined topic or custom one).claim.schemeis the claim scheme (use standard-defined scheme or custom one).claim.issueris the address of the claim issuer.claim.datais the data of the claim.claim.signatureis the signature of the claim.claim.uriis the URI of the claim.
npx hardhat add-claim --identity 0x... --from 0x... --claim '{"type": "1876049747", "scheme": "1", "issuer": "0x...", "data": "0x...", "signature": "0x...", "uri": "https://..."}' --network <myNetwork/localhost>
Remove a claim from an identity
npx hardhat remove-claim --identity <identity address> --from <identity CLAIM key> --claim <claim ID> --network <myNetwork/localhost>
identity addressis the address of the identity contract.identity CLAIM keyis the address of a CLAIM (OR MANAGEMENT) key on the identity (will emit the transaction and pay gas).claim IDis the ID of the claim to remove (keccak256 hash of issuer address and topic abi-encoded).
Revoke a claim on a Claim Issuer
npx hardhat revoke --issuer <claim issuer address> --from <claim issuer management key> --signature <claim signature> --network <myNetwork/localhost>
claim issuer addressis the address of the claim issuer contract.claim issuer management keyis the address of a claim issuer management key (will emit the transaction and pay gas).claim signatureis the signature of the claim to revoke.
Deploy an identity as a proxy
npx hardhat deploy-proxy --factory <factoryAddress> --from <deployer account> --key <ethereum address of identity owner> --network <myNetwork/localhost>
factoryAddressis the address of the factory contract (obtained by deploying a factory).deployer accountis the address of the account that will emit the transaction and pay gas.ethereum address of identity owneris the address of the identity owner (ethereum address), will be set as a MANAGEMENT key on the identity.- Optional:
--salt [salt]to specify a salt for the proxy deployment, otherwise, thekeywill be used as the salt.