Skip to content

Commit

Permalink
Improve Readmes
Browse files Browse the repository at this point in the history
  • Loading branch information
MarioRodriguezS committed Nov 29, 2023
1 parent 1b8e6b6 commit 7194b4a
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 24 deletions.
35 changes: 22 additions & 13 deletions vault_contract/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
<br/><br/>

# Vault Smart Contract
The Vault smart contract is a secure repository designed to safeguard Verifiable Credentials (VCs) in a blockchain environment. The primary purpose of this contract is to provide a dedicated and secure storage solution for managing Verifiable Credentials associated with decentralized identities (DIDs).
The Vault smart contract is a secure repository for safeguarding Verifiable Credentials (VCs).

Through the implementation of control access mechanisms, the smart contract authorizes issuers to deposit credentials through issuance contracts. VCs stored within the Vault utilize an encryption mechanism that prioritizes security and data privacy.

## Development

Expand Down Expand Up @@ -33,7 +35,7 @@ Before getting started with the development of the Vault smart contract, ensure

## Vault Contract Functions

The following functions define the behavior of the Vault smart contract, responsible for managing decentralized identities (DIDs) and their associated verifiable credentials (VCs).
The following functions define the behavior of the Vault smart contract.

### `initialize`
Initializes the Vault Contract by setting the admin and the initial DIDs.
Expand All @@ -42,7 +44,6 @@ Initializes the Vault Contract by setting the admin and the initial DIDs.
fn initialize(e: Env, admin: Address, dids: Vec<String>);
```


#### Parameters:

- e: Environment object.
Expand All @@ -63,7 +64,8 @@ soroban contract invoke \
```

### `authorize_issuer`
Authorizes an issuer adding it to the issuers map.

Authorizes an issuer to issue verifiable credentials to a specific DID. If the DID is already registered or revoked, a specific error will be returned. The admin account is the only party authorized to invoke this function.

```rust
fn authorize_issuer(e: Env, admin: Address, issuer: Address, did: String);
Expand Down Expand Up @@ -91,7 +93,7 @@ soroban contract invoke \
```

### `revoke_issuer`
Revokes an issuer setting its is_revoked property to true.
Revokes an issuer to prevent the issuance of verifiable credentials to a specific DID in the vault. The admin account is the only party authorized to invoke this function.

```rust
fn revoke_issuer(e: Env, admin: Address, issuer: Address, did: String);
Expand Down Expand Up @@ -119,7 +121,7 @@ soroban contract invoke \
```

### `store_vc`:
Stores the verifiable credential.
Stores a verifiable credential related to a holder DID. This function is invoked by the issuer from the vc_issuance_contract smart contract.

```rust
fn store_vc(
Expand All @@ -136,7 +138,7 @@ fn store_vc(

- `e`: Environment object.
- `vc_id`: String representing the unique identifier of the verifiable credential.
- `vc_data`: String containing the verifiable credential data.
- `vc_data`: String containing the encrypted verifiable credential data.
- `recipient_did`: String representing the DID of the credential recipient.
- `issuer_pk`: Address of the issuer's public key.
- `issuance_contract_address`: Address of the contract responsible for credential issuance.
Expand All @@ -150,8 +152,8 @@ soroban contract invoke \
--network testnet \
-- \
store_vc \
--vc_id "vc_id3" \
--vc_data "vc_data" \
--vc_id "vc_id" \
--vc_data "eoZXggNeVDW2g5GeA0G2s0QJBn3SZWzWSE3fXM9V6IB5wWIfFJRxPrTLQRMHulCF62bVQNmZkj7zbSa39fVjAUTtfm6JMio75uMxoDlAN/Y" \
--recipient_did "did:chaincerts:3mtjfbxad3wzh7qa4w5f7q4h" \
--issuer_pk GDSOFBSZMFIY5BMZT3R5FCQK6MJAR2PGDSWHOMHZFGFFGKUO32DBNJKC \
--issuance_contract_address CBRM3HA7GLEI6QQ3O55RUKVRDSQASARUPKK6NXKXKKPWEYLE533GDYQD
Expand All @@ -177,11 +179,15 @@ soroban contract invoke \
--network testnet \
-- \
get_vc \
--vc_id "vc_id"
--vc_id "t5iwuct2njbbcdu2nfwr32ib"

# Response: VerifiableCredential

{"data":"eoZXggNeVDW2g5GeA0G2s0QJBn3SZWzWSE3fXM9V6IB5wWIfFJRxPrTLQRMHulCF62bVQNmZkj7zbSa39fVjAUTtfm6JMio75uMxoDlAN/Y","holder_did":"did:chaincerts:3mtjfbxad3wzh7qa4w5f7q4h","id":"t5iwuct2njbbcdu2nfwr32ib","issuance_contract":"CBWDZIBI5NZ77EPSZLJDS3RTM57D3CIBKAIIOFER2TZEZATUYBASYF65"}
```

### `list_vcs`:
Retrieves the list of verifiable credentials from the storage grouped by DID.
Retrieves the list of verifiable credentials from the storage grouped by DID. The admin account is the only party authorized to invoke this function.

```rust
fn list_vcs(e: Env) -> Map<String, DidWithVCs>;
Expand All @@ -200,10 +206,13 @@ soroban contract invoke \
--network testnet \
-- \
list_vcs

#Response: Map<String, DidWithVCs>
{"\"did:chaincerts:3mtjfbxad3wzh7qa4w5f7q4h\"":{"did":"did:chaincerts:3mtjfbxad3wzh7qa4w5f7q4h","is_revoked":false,"vcs":[{"data":"eoZXggNeVDW2g5GeA0G2s0QJBn3SZWzWSE3fXM9V6IB5wWIfFJRxPrTLQRMHulCF62bVQNmZkj7zbSa39fVjAUTtfm6JMio75uMxoDlAN/Y","holder_did":"did:chaincerts:3mtjfbxad3wzh7qa4w5f7q4h","id":"t5iwuct2njbbcdu2nfwr32ib","issuance_contract":"CBWDZIBI5NZ77EPSZLJDS3RTM57D3CIBKAIIOFER2TZEZATUYBASYF65"}]}}
```

### `revoke_did`:
Revokes a DID given its DID URI.
Revokes a DID based on its DID URI to prevent the issuance of verifiable credentials to the specific DID. The admin account is the only party authorized to invoke this function.

```rust
fn revoke_did(e: Env, admin: Address, did: String);
Expand All @@ -229,7 +238,7 @@ soroban contract invoke \
```

### `register_did`:
Registers a new DID given a DID URI.
Registers a new DID in the vault given a DID URI. The admin account is the only party authorized to invoke this function.

```rust
fn register_did(e: Env, admin: Address, did: String);
Expand Down
90 changes: 79 additions & 11 deletions vc_issuance_contract/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,25 @@ Initializes the VC Issuance Contract by setting the admin.
fn initialize(e: Env, admin: Address);
```

#### Parameters:

- e: Environment object.
- admin: Address of the smart contract administrator.

#### Example:

```bash
soroban contract invoke \
--id CONTRACT_ID \
--source SOURCE_ACCOUNT_SECRET_KEY \
--network testnet \
-- \
initialize \
--admin GC6RRIN6XUZ7NBQS3AYWS6OOWFRLNBOHAYKX3IBYLPKGRODWEANTWJDA
```

### `issue`:
Issues a new Verifiable Credential and returns the Verifiable Credential id as String.
Issues a new Verifiable Credential and returns the Verifiable Credential id as String. The admin account is the only party authorized to invoke this function.

```rust
fn issue(
Expand All @@ -83,6 +100,20 @@ fn issue(
- `vc_data`: String representing encrypted Verifiable Credential data.
- `storage_address`: Vault smart contract address

#### Example:

```bash
soroban contract invoke \
--id CONTRACT_ID \
--source SOURCE_ACCOUNT_SECRET_KEY \
--network testnet \
-- \
revoke \
--admin GC6RRIN6XUZ7NBQS3AYWS6OOWFRLNBOHAYKX3IBYLPKGRODWEANTWJDA \
--vc_data "eoZXggNeVDW2g5GeA0G2s0QJBn3SZWzWSE3fXM9V6IB5wWIfFJRxPrTLQRMHulCF62bVQNmZkj7zbSa39fVjAUTtfm6JMio75uMxoDlAN/Y" \
--storage_address GR2RRIN6XUZ7NBQS3AYWS6OOWFRLNBOHAYKX3IBYLPKGRODWEANTWJDA
```

### `verify`
Verifies if the Verifiable Credential has been revoked, it returns a Map with the respective status.

Expand All @@ -95,37 +126,74 @@ fn verify(e: Env, vc_id: String) -> Map<String, String>;
- `e`: Environment object.
- `vc_id`: String representing the VC ID to verify.

#### Example:

```bash
soroban contract invoke \
--id CONTRACT_ID \
--source SOURCE_ACCOUNT_SECRET_KEY \
--network testnet \
-- \
verify \
--vc_id "vc_id"
```

### `revoke`
Revokes a verifiable credential in a specific date.
Revokes a verifiable credential in a specific date. The admin account is the only party authorized to invoke this function.

```rust
fn revoke(e: Env, admin: Address, vc_id: String, date: String);
```

Parameters:
#### Parameters:

- `e`: Environment object.
- `admin`: Address of the smart contract administrator.
- `vc_id`: ID of the VC to be revoked.
- `date`: String representing the date where the VC is revoked.

#### Example:

```bash
soroban contract invoke \
--id CONTRACT_ID \
--source SOURCE_ACCOUNT_SECRET_KEY \
--network testnet \
-- \
revoke \
--admin GC6RRIN6XUZ7NBQS3AYWS6OOWFRLNBOHAYKX3IBYLPKGRODWEANTWJDA \
--vc_id "vc_id" \
--date "01/01/2010 14:10:10"
```

## Deployment
...

1. Build the contract:
```
soroban contract build
```

This will generate a WASM file for the contract in the `target/wasm32-unknown-unknown/release/` directory.

2. Deploy using Soroban CLI:
```bash
soroban contract deploy \
--source-account SOURCE_ACCOUNT_SECRET_KEY \
--rpc-url https://rpc-futurenet.stellar.org \
--network-passphrase 'Test SDF Network ; October 2022' \
--wasm target/wasm32-unknown-unknown/release/vc_issuance_contract.wasm
CONTRACT_ID
```

## Contract Errors

| Code | Error | Description |
| --- | --- | --- |
| 1 | `AlreadyInitialized` | Contract has already been initialized |
| 2 | `NotAuthorized` | Invoker lacks the necessary authorization as the contract administrator |
| 3 | `EmptyDIDs` | The array of DIDs is empty |
| 4 | `IssuerNotFound` | The specified issuer was not found |
| 5 | `DidRevoked` | The DID cannot perform the action because it has been revoked |
| 6 | `DidNotFound` | The specified DID was not found |
| 7 | `IssuerRevoked` | The issuer cannot perform the action because it has been revoked |
| 8 | `VCNotFound` | The Verifiable Credential (VC) was not found |
| 9 | `DuplicatedDID` | The DID is already registered |
| 3 | `AmountLimitExceeded` | The amount exceeds the issuance contract's capacity for certificates |
| 4 | `VCNotFound` | The Verifiable Credential (VC) was not found |
## Changelog
Features and bug fixes are listed in the [CHANGELOG][changelog] file.
Expand Down

0 comments on commit 7194b4a

Please sign in to comment.