Skip to content

Solidity API

TestDisputeManager

accept

mapping(bytes32 => bool) accept

accepted

function accepted(address provider, address buyer, bytes32 orig, bytes32 crypted) public view returns (bool)

setAccepted

function setAccepted(bytes32 orig, bytes32 crypted, address provider, address buyer) public

Common

getCurrentBlockNumber

function getCurrentBlockNumber() external view returns (uint256)

getCurrentBlockNumber get block number

Name Type Description
[0] uint256 the current block number

isContract

function isContract(address addr) public view returns (bool)

isContract detect whether the address is is a contract address or externally owned account

Name Type Description
[0] bool true if it is a contract address

provenanceSignatureIsCorrect

function provenanceSignatureIsCorrect(address _agentId, bytes32 _hash, bytes _signature) public pure returns (bool)
Name Type Description
_agentId address The address of the agent
_hash bytes32 bytes32 message, the hash is the signed message. What is recovered is the signer address.
_signature bytes Signatures provided by the agent
Name Type Description
[0] bool true if the signature correspond to the agent address

calculateTotalAmount

function calculateTotalAmount(uint256[] _amounts) public pure returns (uint256)

Sum the total amount given an uint array

Name Type Description
[0] uint256 the total amount

addressToBytes32

function addressToBytes32(address _addr) public pure returns (bytes32)

bytes32ToAddress

function bytes32ToAddress(bytes32 _b32) public pure returns (address)

Dispenser

tokenRequests

mapping(address => uint256) tokenRequests

totalMintAmount

uint256 totalMintAmount

maxAmount

uint256 maxAmount

maxMintAmount

uint256 maxMintAmount

minPeriod

uint256 minPeriod

scale

uint256 scale

token

contract NeverminedToken token

RequestFrequencyExceeded

event RequestFrequencyExceeded(address requester, uint256 minPeriod)

RequestLimitExceeded

event RequestLimitExceeded(address requester, uint256 amount, uint256 maxAmount)

isValidAddress

modifier isValidAddress(address _address)

initialize

function initialize(address _tokenAddress, address _owner) external

Dispenser Initializer

Name Type Description
_tokenAddress address The deployed contract address of an ERC20
_owner address The owner of the Dispenser Runs only on initial contract creation.

requestTokens

function requestTokens(uint256 amount) external returns (bool tokensTransferred)

user can request some tokens for testing

Name Type Description
amount uint256 the amount of tokens to be requested
Name Type Description
tokensTransferred bool Boolean indication of tokens are requested

setMinPeriod

function setMinPeriod(uint256 period) external

the Owner can set the min period for token requests

Name Type Description
period uint256 the min amount of time before next request

setMaxAmount

function setMaxAmount(uint256 amount) external

the Owner can set the max amount for token requests

Name Type Description
amount uint256 the max amount of tokens that can be requested

setMaxMintAmount

function setMaxMintAmount(uint256 amount) external

the Owner can set the max amount for token requests

Name Type Description
amount uint256 the max amount of tokens that can be requested

HashLists

Hash lists contract is a sample list contract in which uses HashListLibrary.sol in order to store, retrieve, remove, and update bytes32 values in hash lists. This is a reference implementation for IList interface. It is used for whitelisting condition. Any entity can have its own implementation of the interface in which could be used for the same condition.

lists

mapping(bytes32 => struct HashListLibrary.List) lists

initialize

function initialize(address _owner) public

HashLists Initializer

Name Type Description
_owner address The owner of the hash list Runs only upon contract creation.

hash

function hash(address account) public pure returns (bytes32)

hash ethereum accounts

Name Type Description
account address Ethereum address
Name Type Description
[0] bytes32 bytes32 hash of the account

add

function add(bytes32[] values) external returns (bool)

put an array of elements without indexing this meant to save gas in case of large arrays

Name Type Description
values bytes32[] is an array of elements value
Name Type Description
[0] bool true if values are added successfully

add

function add(bytes32 value) external returns (bool)

add indexes an element then adds it to a list

Name Type Description
value bytes32 is a bytes32 value
Name Type Description
[0] bool true if value is added successfully

update

function update(bytes32 oldValue, bytes32 newValue) external returns (bool)

update the value with a new value and maintain indices

Name Type Description
oldValue bytes32 is an element value in a list
newValue bytes32 new value
Name Type Description
[0] bool true if value is updated successfully

index

function index(uint256 from, uint256 to) external returns (bool)

index is used to map each element value to its index on the list

Name Type Description
from uint256 index is where to 'from' indexing in the list
to uint256 index is where to stop indexing
Name Type Description
[0] bool true if the sub list is indexed

has

function has(bytes32 id, bytes32 value) external view returns (bool)

has checks whether a value is exist

Name Type Description
id bytes32 the list identifier (the hash of list owner's address)
value bytes32 is element value in list
Name Type Description
[0] bool true if the value exists

has

function has(bytes32 value) external view returns (bool)

has checks whether a value is exist

Name Type Description
value bytes32 is element value in list
Name Type Description
[0] bool true if the value exists

remove

function remove(bytes32 value) external returns (bool)

remove value from a list, updates indices, and list size

Name Type Description
value bytes32 is an element value in a list
Name Type Description
[0] bool true if value is removed successfully

get

function get(bytes32 id, uint256 _index) external view returns (bytes32)

has value by index

Name Type Description
id bytes32 the list identifier (the hash of list owner's address)
_index uint256 is where is value is stored in the list
Name Type Description
[0] bytes32 the value if exists

size

function size(bytes32 id) external view returns (uint256)

size gets the list size

Name Type Description
id bytes32 the list identifier (the hash of list owner's address)
Name Type Description
[0] uint256 total length of the list

all

function all(bytes32 id) external view returns (bytes32[])

all returns all list elements

Name Type Description
id bytes32 the list identifier (the hash of list owner's address)
Name Type Description
[0] bytes32[] all list elements

indexOf

function indexOf(bytes32 id, bytes32 value) external view returns (uint256)

indexOf gets the index of a value in a list

Name Type Description
id bytes32 the list identifier (the hash of list owner's address)
value bytes32 is element value in list
Name Type Description
[0] uint256 value index in list

ownedBy

function ownedBy(bytes32 id) external view returns (address)

ownedBy gets the list owner

Name Type Description
id bytes32 the list identifier (the hash of list owner's address)
Name Type Description
[0] address list owner

isIndexed

function isIndexed(bytes32 id) external view returns (bool)

isIndexed checks if the list is indexed

Name Type Description
id bytes32 the list identifier (the hash of list owner's address)
Name Type Description
[0] bool true if the list is indexed

NeverminedToken

Implementation of a Test Token. Test Token is an ERC20 token only for testing purposes

initialize

function initialize(address _owner, address payable _initialMinter) public

NeverminedToken Initializer Runs only on initial contract creation.

Name Type Description
_owner address refers to the owner of the contract
_initialMinter address payable is the first token minter added

_beforeTokenTransfer

function _beforeTokenTransfer(address from, address to, uint256 amount) internal

_See {ERC20-_beforeTokenTransfer}.

Requirements:

  • minted tokens must not cause the total supply to go over the cap._

mint

function mint(address account, uint256 amount) external returns (bool)

_Creates amount tokens and assigns them to account, increasing the total supply.

Emits a {Transfer} event with from set to the zero address.

Requirements:

  • to cannot be the zero address._

AgreementStoreLibrary

Implementation of the Agreement Store Library. The agreement store library holds the business logic in which manages the life cycle of SEA agreement, each agreement is linked to the DID of an asset, template, and condition IDs.

Agreement

struct Agreement {
  bytes32 did;
  address templateId;
  bytes32[] conditionIds;
  address lastUpdatedBy;
  uint256 blockNumberUpdated;
}

AgreementList

struct AgreementList {
  mapping(bytes32 => struct AgreementStoreLibrary.Agreement) agreements;
  mapping(bytes32 => bytes32[]) didToAgreementIds;
  mapping(address => bytes32[]) templateIdToAgreementIds;
  bytes32[] agreementIds;
}

create

function create(struct AgreementStoreLibrary.AgreementList _self, bytes32 _id, bytes32, address _templateId, bytes32[]) internal

create new agreement checks whether the agreement Id exists, creates new agreement instance, including the template, conditions and DID.

Name Type Description
_self struct AgreementStoreLibrary.AgreementList is AgreementList storage pointer
_id bytes32 agreement identifier
bytes32
_templateId address template identifier
bytes32[]

Template

getConditionTypes

function getConditionTypes() external view returns (address[])

AgreementStoreManager

_Implementation of the Agreement Store.

 The agreement store generates conditions for an agreement template.
 Agreement templates must to be approved in the Template Store
 Each agreement is linked to the DID of an asset._

PROXY_ROLE

bytes32 PROXY_ROLE

grantProxyRole

function grantProxyRole(address _address) public

revokeProxyRole

function revokeProxyRole(address _address) public

agreementList

struct AgreementStoreLibrary.AgreementList agreementList

state storage for the agreements

conditionStoreManager

contract ConditionStoreManager conditionStoreManager

templateStoreManager

contract TemplateStoreManager templateStoreManager

didRegistry

contract DIDRegistry didRegistry

initialize

function initialize(address _owner, address _conditionStoreManagerAddress, address _templateStoreManagerAddress, address _didRegistryAddress) public

initialize AgreementStoreManager Initializer Initializes Ownable. Only on contract creation.

Name Type Description
_owner address refers to the owner of the contract
_conditionStoreManagerAddress address is the address of the connected condition store
_templateStoreManagerAddress address is the address of the connected template store
_didRegistryAddress address is the address of the connected DID Registry

fullConditionId

function fullConditionId(bytes32 _agreementId, address _condType, bytes32 _valueHash) public pure returns (bytes32)

agreementId

function agreementId(bytes32 _agreementId, address _creator) public pure returns (bytes32)

createAgreement

function createAgreement(bytes32 _id, bytes32 _did, address[] _conditionTypes, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts) public

Create a new agreement. The agreement will create conditions of conditionType with conditionId. Only "approved" templates can access this function.

Name Type Description
_id bytes32 is the ID of the new agreement. Must be unique.
_did bytes32 is the bytes32 DID of the asset. The DID must be registered beforehand.
_conditionTypes address[] is a list of addresses that point to Condition contracts.
_conditionIds bytes32[] is a list of bytes32 content-addressed Condition IDs
_timeLocks uint256[] is a list of uint time lock values associated to each Condition
_timeOuts uint256[] is a list of uint time out values associated to each Condition

CreateAgreementArgs

struct CreateAgreementArgs {
  bytes32 _id;
  bytes32 _did;
  address[] _conditionTypes;
  bytes32[] _conditionIds;
  uint256[] _timeLocks;
  uint256[] _timeOuts;
  address _creator;
  uint256 _idx;
  address payable _rewardAddress;
  address _tokenAddress;
  uint256[] _amounts;
  address[] _receivers;
}

createAgreementAndPay

function createAgreementAndPay(struct AgreementStoreManager.CreateAgreementArgs args) public payable

createAgreementAndFulfill

function createAgreementAndFulfill(bytes32 _id, bytes32 _did, address[] _conditionTypes, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts, address[] _account, uint256[] _idx, bytes[] params) public payable

getAgreementTemplate

function getAgreementTemplate(bytes32 _id) external view returns (address)

getDIDRegistryAddress

function getDIDRegistryAddress() public view virtual returns (address)

getDIDRegistryAddress utility function used by other contracts or any EOA.

Name Type Description
[0] address the DIDRegistry address

AccessCondition

_Implementation of the Access Condition

 Access Secret Store Condition is special condition
 where a client or Parity secret store can encrypt/decrypt documents 
 based on the on-chain granted permissions. For a given DID 
 document, and agreement ID, the owner/provider of the DID 
 will fulfill the condition. Consequently secret store 
 will check whether the permission is granted for the consumer
 in order to encrypt/decrypt the document._

CONDITION_TYPE

bytes32 CONDITION_TYPE

DocumentPermission

struct DocumentPermission {
  bytes32 agreementIdDeprecated;
  mapping(address => bool) permission;
}

documentPermissions

mapping(bytes32 => struct AccessCondition.DocumentPermission) documentPermissions

agreementStoreManager

contract AgreementStoreManager agreementStoreManager

didRegistry

contract DIDRegistry didRegistry

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _documentId, address _grantee, bytes32 _conditionId)

onlyDIDOwnerOrProvider

modifier onlyDIDOwnerOrProvider(bytes32 _documentId)

initialize

function initialize(address _owner, address _conditionStoreManagerAddress, address _agreementStoreManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address
_agreementStoreManagerAddress address agreement store manager address

reinitialize

function reinitialize() external

Should be called when the contract has been upgraded.

hashValues

function hashValues(bytes32 _documentId, address _grantee) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_documentId bytes32 refers to the DID in which secret store will issue the decryption keys
_grantee address is the address of the granted user or the DID provider
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _documentId, address _grantee) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill access secret store condition

only DID owner or DID provider can call this method. Fulfill method sets the permissions for the granted consumer's address to true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_documentId bytes32 refers to the DID in which secret store will issue the decryption keys
_grantee address is the address of the granted user or the DID provider
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

grantPermission

function grantPermission(address _grantee, bytes32 _documentId) public

grantPermission is called only by DID owner or provider

Name Type Description
_grantee address is the address of the granted user or the DID provider
_documentId bytes32 refers to the DID in which secret store will issue the decryption keys

renouncePermission

function renouncePermission(address _grantee, bytes32 _documentId) public

renouncePermission is called only by DID owner or provider

Name Type Description
_grantee address is the address of the granted user or the DID provider
_documentId bytes32 refers to the DID in which secret store will issue the decryption keys

checkPermissions

function checkPermissions(address _grantee, bytes32 _documentId) external view returns (bool permissionGranted)

checkPermissions is called by Parity secret store

Name Type Description
_grantee address is the address of the granted user or the DID provider
_documentId bytes32 refers to the DID in which secret store will issue the decryption keys
Name Type Description
permissionGranted bool true if the access was granted

IDisputeManager

verifyProof

function verifyProof(bytes proof, uint256[] pubSignals) external view returns (bool)

AccessProofCondition

Implementation of the Access Condition with transfer proof. The idea is that the hash of the decryption key is known before hand, and the key matching this hash is passed from data provider to the buyer using this smart contract. Using ZK proof the key is kept hidden from outsiders. For the protocol to work, both the provider and buyer need to have public keys in the babyjub curve. To initiate the deal, buyer will pass the key hash and the public keys of participants. The provider needs to pass the cipher text encrypted using MIMC (symmetric encryption). The secret key for MIMC is computed using ECDH (requires one public key and one secret key for the curve). The hash function that is used is Poseidon.

CONDITION_TYPE

bytes32 CONDITION_TYPE

agreementStoreManager

contract AgreementStoreManager agreementStoreManager

disputeManager

contract IDisputeManager disputeManager

Fulfilled

event Fulfilled(bytes32 _agreementId, uint256 _origHash, uint256[2] _buyer, uint256[2] _provider, uint256[2] _cipher, bytes _proof, bytes32 _conditionId)

initialize

function initialize(address _owner, address _conditionStoreManagerAddress, address _agreementStoreManagerAddress, address _disputeManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address
_agreementStoreManagerAddress address agreement store manager address
_disputeManagerAddress address dispute manager address

changeDisputeManager

function changeDisputeManager(address _disputeManagerAddress) external

hashValues

function hashValues(uint256 _origHash, uint256[2] _buyer, uint256[2] _provider) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_origHash uint256 is the hash of the key
_buyer uint256[2] buyer public key
_provider uint256[2] provider public key
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, uint256 _origHash, uint256[2] _buyer, uint256[2] _provider, uint256[2] _cipher, bytes _proof) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill key transfer

The key with hash _origHash is transferred to the _buyer from _provider.

Name Type Description
_agreementId bytes32 associated agreement
_origHash uint256 is the hash of data to access
_buyer uint256[2] buyer public key
_provider uint256[2] provider public key
_cipher uint256[2] encrypted version of the key
_proof bytes SNARK proof that the cipher text can be decrypted by buyer to give the key with hash _origHash
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

ComputeExecutionCondition

Implementation of the Compute Execution Condition This condition is meant to be a signal in which triggers the execution of a compute service. The compute service is fully described in the associated DID document. The provider of the compute service will send this signal to its workers by fulfilling the condition where they are listening to the fulfilled event.

CONDITION_TYPE

bytes32 CONDITION_TYPE

computeExecutionStatus

mapping(bytes32 => mapping(address => bool)) computeExecutionStatus

agreementStoreManager

contract AgreementStoreManager agreementStoreManager

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _did, address _computeConsumer, bytes32 _conditionId)

onlyDIDOwnerOrProvider

modifier onlyDIDOwnerOrProvider(bytes32 _did)

initialize

function initialize(address _owner, address _conditionStoreManagerAddress, address _agreementStoreManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address
_agreementStoreManagerAddress address agreement store manager address

hashValues

function hashValues(bytes32 _did, address _computeConsumer) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 Decentralized Identifier (unique compute/asset resolver) describes the compute service
_computeConsumer address is the consumer's address
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _computeConsumer) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill compute execution condition

only the compute provider can fulfill this condition. By fulfilling this condition the compute provider will trigger the execution of the offered job/compute. The compute service is described in a DID document.

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 Decentralized Identifier (unique compute/asset resolver) describes the compute service
_computeConsumer address is the consumer's address
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

wasComputeTriggered

function wasComputeTriggered(bytes32 _did, address _computeConsumer) public view returns (bool)

wasComputeTriggered checks whether the compute is triggered or not.

Name Type Description
_did bytes32 Decentralized Identifier (unique compute/asset resolver) describes the compute service
_computeConsumer address is the compute consumer's address
Name Type Description
[0] bool true if the compute is triggered

Condition

_Implementation of the Condition

 Each condition has a validation function that returns either FULFILLED, 
 ABORTED or UNFULFILLED. When a condition is successfully solved, we call 
 it FULFILLED. If a condition cannot be FULFILLED anymore due to a timeout 
 or other types of counter-proofs, the condition is ABORTED. UNFULFILLED 
 values imply that a condition has not been provably FULFILLED or ABORTED. 
 All initialized conditions start out as UNFULFILLED._

conditionStoreManager

contract ConditionStoreManager conditionStoreManager

generateId

function generateId(bytes32 _agreementId, bytes32 _valueHash) public view returns (bytes32)

generateId condition Id from the following parameters

Name Type Description
_agreementId bytes32 SEA agreement ID
_valueHash bytes32 hash of all the condition input values

fulfill

function fulfill(bytes32 _id, enum ConditionStoreLibrary.ConditionState _newState) internal returns (enum ConditionStoreLibrary.ConditionState)

fulfill set the condition state to Fulfill | Abort

Name Type Description
_id bytes32 condition identifier
_newState enum ConditionStoreLibrary.ConditionState new condition state (Fulfill/Abort)
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState the updated condition state

abortByTimeOut

function abortByTimeOut(bytes32 _id) external returns (enum ConditionStoreLibrary.ConditionState)

abortByTimeOut set condition state to Aborted if the condition is timed out

Name Type Description
_id bytes32 condition identifier
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState the updated condition state

ConditionStoreLibrary

_Implementation of the Condition Store Library.

 Condition is a key component in the service execution agreement. 
 This library holds the logic for creating and updating condition 
 Any Condition has only four state transitions starts with Uninitialized,
 Unfulfilled, Fulfilled, and Aborted. Condition state transition goes only 
 forward from Unintialized -> Unfulfilled -> {Fulfilled || Aborted}_

ConditionState

enum ConditionState {
  Uninitialized,
  Unfulfilled,
  Fulfilled,
  Aborted
}

Condition

struct Condition {
  address typeRef;
  enum ConditionStoreLibrary.ConditionState state;
  address createdBy;
  address lastUpdatedBy;
  uint256 blockNumberUpdated;
}

ConditionList

struct ConditionList {
  mapping(bytes32 => struct ConditionStoreLibrary.Condition) conditions;
  mapping(bytes32 => mapping(bytes32 => bytes32)) map;
  bytes32[] conditionIds;
}

create

function create(struct ConditionStoreLibrary.ConditionList _self, bytes32 _id, address _typeRef) internal

create new condition

check whether the condition exists, assigns condition type, condition state, last updated by, and update at (which is the current block number)

Name Type Description
_self struct ConditionStoreLibrary.ConditionList is the ConditionList storage pointer
_id bytes32 valid condition identifier
_typeRef address condition contract address

updateState

function updateState(struct ConditionStoreLibrary.ConditionList _self, bytes32 _id, enum ConditionStoreLibrary.ConditionState _newState) internal

updateState update the condition state

check whether the condition state transition is right, assign the new state, update last updated by and updated at.

Name Type Description
_self struct ConditionStoreLibrary.ConditionList is the ConditionList storage pointer
_id bytes32 condition identifier
_newState enum ConditionStoreLibrary.ConditionState the new state of the condition

updateKeyValue

function updateKeyValue(struct ConditionStoreLibrary.ConditionList _self, bytes32 _id, bytes32 _key, bytes32 _value) internal

ConditionStoreManager

_Implementation of the Condition Store Manager.

 Condition store manager is responsible for enforcing the 
 the business logic behind creating/updating the condition state
 based on the assigned role to each party. Only specific type of
 contracts are allowed to call this contract, therefore there are 
 two types of roles, create role that in which is able to create conditions.
 The second role is the update role, which is can update the condition state.
 Also, it support delegating the roles to other contract(s)/account(s)._

PROXY_ROLE

bytes32 PROXY_ROLE

RoleType

enum RoleType {
  Create,
  Update
}

createRole

address createRole

conditionList

struct ConditionStoreLibrary.ConditionList conditionList

epochList

struct EpochLibrary.EpochList epochList

nvmConfigAddress

address nvmConfigAddress

ConditionCreated

event ConditionCreated(bytes32 _id, address _typeRef, address _who)

ConditionUpdated

event ConditionUpdated(bytes32 _id, address _typeRef, enum ConditionStoreLibrary.ConditionState _state, address _who)

onlyCreateRole

modifier onlyCreateRole()

onlyUpdateRole

modifier onlyUpdateRole(bytes32 _id)

onlyValidType

modifier onlyValidType(address typeRef)

initialize

function initialize(address _creator, address _owner, address _nvmConfigAddress) public

initialize ConditionStoreManager Initializer Initialize Ownable. Only on contract creation,

Name Type Description
_creator address refers to the creator of the contract
_owner address refers to the owner of the contract
_nvmConfigAddress address refers to the contract address of NeverminedConfig

getCreateRole

function getCreateRole() external view returns (address)

getCreateRole get the address of contract which has the create role

Name Type Description
[0] address create condition role address

getNvmConfigAddress

function getNvmConfigAddress() external view returns (address)

getNvmConfigAddress get the address of the NeverminedConfig contract

Name Type Description
[0] address NeverminedConfig contract address

setNvmConfigAddress

function setNvmConfigAddress(address _addr) external

delegateCreateRole

function delegateCreateRole(address delegatee) external

delegateCreateRole only owner can delegate the create condition role to a different address

Name Type Description
delegatee address delegatee address

delegateUpdateRole

function delegateUpdateRole(bytes32 _id, address delegatee) external

delegateUpdateRole only owner can delegate the update role to a different address for specific condition Id which has the create role

Name Type Description
_id bytes32
delegatee address delegatee address

grantProxyRole

function grantProxyRole(address _address) public

revokeProxyRole

function revokeProxyRole(address _address) public

createCondition

function createCondition(bytes32 _id, address _typeRef) external

createCondition only called by create role address the condition should use a valid condition contract address, valid time lock and timeout. Moreover, it enforce the condition state transition from Uninitialized to Unfulfilled.

Name Type Description
_id bytes32 unique condition identifier
_typeRef address condition contract address

createCondition2

function createCondition2(bytes32 _id, address _typeRef) external

createCondition

function createCondition(bytes32 _id, address _typeRef, uint256 _timeLock, uint256 _timeOut) public

createCondition only called by create role address the condition should use a valid condition contract address, valid time lock and timeout. Moreover, it enforce the condition state transition from Uninitialized to Unfulfilled.

Name Type Description
_id bytes32 unique condition identifier
_typeRef address condition contract address
_timeLock uint256 start of the time window
_timeOut uint256 end of the time window

updateConditionState

function updateConditionState(bytes32 _id, enum ConditionStoreLibrary.ConditionState _newState) external returns (enum ConditionStoreLibrary.ConditionState)

updateConditionState only called by update role address. It enforce the condition state transition to either Fulfill or Aborted state

Name Type Description
_id bytes32 unique condition identifier
_newState enum ConditionStoreLibrary.ConditionState
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState the current condition state

updateConditionMapping

function updateConditionMapping(bytes32 _id, bytes32 _key, bytes32 _value) external

updateConditionMappingProxy

function updateConditionMappingProxy(bytes32 _id, bytes32 _key, bytes32 _value) external

getCondition

function getCondition(bytes32 _id) external view returns (address typeRef, enum ConditionStoreLibrary.ConditionState state, uint256 timeLock, uint256 timeOut, uint256 blockNumber)

getCondition

Name Type Description
typeRef address the type reference
state enum ConditionStoreLibrary.ConditionState condition state
timeLock uint256 the time lock
timeOut uint256 time out
blockNumber uint256 block number

getConditionState

function getConditionState(bytes32 _id) external view virtual returns (enum ConditionStoreLibrary.ConditionState)

getConditionState

Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

getConditionTypeRef

function getConditionTypeRef(bytes32 _id) external view virtual returns (address)

getConditionTypeRef

Name Type Description
[0] address condition typeRef

getMappingValue

function getMappingValue(bytes32 _id, bytes32 _key) external view virtual returns (bytes32)

getConditionState

Name Type Description
[0] bytes32 condition state

isConditionTimeLocked

function isConditionTimeLocked(bytes32 _id) public view returns (bool)

isConditionTimeLocked

Name Type Description
[0] bool whether the condition is timedLock ended

isConditionTimedOut

function isConditionTimedOut(bytes32 _id) public view returns (bool)

isConditionTimedOut

Name Type Description
[0] bool whether the condition is timed out

HashLockCondition

Implementation of the Hash Lock Condition

CONDITION_TYPE

bytes32 CONDITION_TYPE

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValues

function hashValues(uint256 _preimage) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_preimage uint256 refers uint value of the hash pre-image.
Name Type Description
[0] bytes32 bytes32 hash of all these values

hashValues

function hashValues(string _preimage) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_preimage string refers string value of the hash pre-image.
Name Type Description
[0] bytes32 bytes32 hash of all these values

hashValues

function hashValues(bytes32 _preimage) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_preimage bytes32 refers bytes32 value of the hash pre-image.
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, uint256 _preimage) external returns (enum ConditionStoreLibrary.ConditionState)

fulfill the condition by calling check the the hash and the pre-image uint value

Name Type Description
_agreementId bytes32 SEA agreement identifier
_preimage uint256
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

fulfill

function fulfill(bytes32 _agreementId, string _preimage) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill the condition by calling check the the hash and the pre-image string value

Name Type Description
_agreementId bytes32 SEA agreement identifier
_preimage string
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

fulfill

function fulfill(bytes32 _agreementId, bytes32 _preimage) external returns (enum ConditionStoreLibrary.ConditionState)

fulfill the condition by calling check the the hash and the pre-image bytes32 value

Name Type Description
_agreementId bytes32 SEA agreement identifier
_preimage bytes32
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

_fulfill

function _fulfill(bytes32 _generatedId) private returns (enum ConditionStoreLibrary.ConditionState)

_fulfill calls super fulfil method

Name Type Description
_generatedId bytes32 SEA agreement identifier
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

ICondition

fulfillProxy

function fulfillProxy(address _account, bytes32 _agreementId, bytes params) external payable

ILockPayment

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _did, bytes32 _conditionId, address _rewardAddress, address _tokenAddress, address[] _receivers, uint256[] _amounts)

hashValues

function hashValues(bytes32 _did, address _rewardAddress, address _tokenAddress, uint256[] _amounts, address[] _receivers) external pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the asset decentralized identifier
_rewardAddress address the contract address where the reward is locked
_tokenAddress address the ERC20 contract address to use during the lock payment. If the address is 0x0 means we won't use a ERC20 but ETH for payment
_amounts uint256[] token amounts to be locked/released
_receivers address[] receiver's addresses
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address payable _rewardAddress, address _tokenAddress, uint256[] _amounts, address[] _receivers) external payable returns (enum ConditionStoreLibrary.ConditionState)

fulfill requires valid token transfer in order to lock the amount of tokens based on the SEA

Name Type Description
_agreementId bytes32 the agreement identifier
_did bytes32 the asset decentralized identifier
_rewardAddress address payable the contract address where the reward is locked
_tokenAddress address the ERC20 contract address to use during the lock payment.
_amounts uint256[] token amounts to be locked/released
_receivers address[] receiver's addresses
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

LockPaymentCondition

Implementation of the Lock Payment Condition This condition allows to lock payment for multiple receivers taking into account the royalties to be paid to the original creators in a secondary market.

didRegistry

contract DIDRegistry didRegistry

nvmConfig

contract INVMConfig nvmConfig

CONDITION_TYPE

bytes32 CONDITION_TYPE

KEY_ASSET_RECEIVER

bytes32 KEY_ASSET_RECEIVER

PROXY_ROLE

bytes32 PROXY_ROLE

ALLOWED_EXTERNAL_CONTRACT_ROLE

bytes32 ALLOWED_EXTERNAL_CONTRACT_ROLE

grantProxyRole

function grantProxyRole(address _address) public

revokeProxyRole

function revokeProxyRole(address _address) public

grantExternalContractRole

function grantExternalContractRole(address _address) public

revokeExternalContractRole

function revokeExternalContractRole(address _address) public

initialize

function initialize(address _owner, address _conditionStoreManagerAddress, address _didRegistryAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address
_didRegistryAddress address DID Registry address

reinitialize

function reinitialize() external

Should be called when the contract has been upgraded.

hashValues

function hashValues(bytes32 _did, address _rewardAddress, address _tokenAddress, uint256[] _amounts, address[] _receivers) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the asset decentralized identifier
_rewardAddress address the contract address where the reward is locked
_tokenAddress address the ERC20 contract address to use during the lock payment. If the address is 0x0 means we won't use a ERC20 but ETH for payment
_amounts uint256[] token amounts to be locked/released
_receivers address[] receiver's addresses
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address payable _rewardAddress, address _tokenAddress, uint256[] _amounts, address[] _receivers) external payable returns (enum ConditionStoreLibrary.ConditionState)

fulfill requires valid token transfer in order to lock the amount of tokens based on the SEA

Name Type Description
_agreementId bytes32 the agreement identifier
_did bytes32 the asset decentralized identifier
_rewardAddress address payable the contract address where the reward is locked
_tokenAddress address the ERC20 contract address to use during the lock payment.
_amounts uint256[] token amounts to be locked/released
_receivers address[] receiver's addresses
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

fulfillExternal

function fulfillExternal(bytes32 _agreementId, bytes32 _did, address payable _rewardAddress, address _externalContract, bytes32 _remoteId, uint256[] _amounts, address[] _receivers) external payable returns (enum ConditionStoreLibrary.ConditionState)

fulfill lock condition using the funds locked in an external contract (auction, bonding curve, lottery, etc)

Name Type Description
_agreementId bytes32 the agreement identifier
_did bytes32 the asset decentralized identifier
_rewardAddress address payable the contract address where the reward is locked
_externalContract address the address of the contract with the lock funds are locked
_remoteId bytes32 the id used to identify into the external contract
_amounts uint256[] token amounts to be locked/released
_receivers address[] receiver's addresses
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

encodeParams

function encodeParams(bytes32 _did, address payable _rewardAddress, address _tokenAddress, uint256[] _amounts, address[] _receivers) external pure returns (bytes)

fulfillInternal

function fulfillInternal(address _account, bytes32 _agreementId, bytes32 _did, address payable _rewardAddress, address _tokenAddress, uint256[] _amounts, address[] _receivers) internal returns (enum ConditionStoreLibrary.ConditionState)

fulfillProxy

function fulfillProxy(address _account, bytes32 _agreementId, bytes params) external payable

_transferERC20Proxy

function _transferERC20Proxy(address _senderAddress, address _rewardAddress, address _tokenAddress, uint256 _amount) internal

_transferERC20Proxy transfer ERC20 tokens

Will throw if transfer fails

Name Type Description
_senderAddress address the address to send the tokens from
_rewardAddress address the address to receive the tokens
_tokenAddress address the ERC20 contract address to use during the payment
_amount uint256 token amount to be locked/released

_transferETH

function _transferETH(address payable _rewardAddress, uint256 _amount) internal

_transferETH transfer ETH

Name Type Description
_rewardAddress address payable the address to receive the ETH
_amount uint256 ETH amount to be locked/released

allowedExternalContract

modifier allowedExternalContract(address _externalContractAddress)

areMarketplaceFeesIncluded

function areMarketplaceFeesIncluded(uint256[] _amounts, address[] _receivers) internal view returns (bool)

DistributeNFTCollateralCondition

Implementation of a condition allowing to transfer a NFT to an account or another depending on the final state of a lock condition

CONDITION_TYPE

bytes32 CONDITION_TYPE

aaveCreditVault

contract AaveCreditVault aaveCreditVault

_lockConditionAddress

address _lockConditionAddress

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _did, address _receiver, bytes32 _conditionId, address _contract)

initialize

function initialize(address _owner, address _conditionStoreManagerAddress, address _lockNFTConditionAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address
_lockNFTConditionAddress address Lock NFT Condition address

hashValues

function hashValues(bytes32 _did, address _vaultAddress, address _nftContractAddress) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_vaultAddress address The contract address of the vault
_nftContractAddress address NFT contract to use
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _vaultAddress, address _nftContractAddress) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method transfer a certain amount of NFTs to the _nftReceiver address. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_vaultAddress address The contract address of the vault
_nftContractAddress address NFT contract to use
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

INFTAccess

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _documentId, address _grantee, bytes32 _conditionId)

hashValues

function hashValues(bytes32 _documentId, address _grantee, address _contractAddress) external pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_documentId bytes32 refers to the DID in which secret store will issue the decryption keys
_grantee address is the address of the granted user or the DID provider
_contractAddress address contract address holding the NFT (ERC-721) or the NFT Factory (ERC-1155)
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _documentId, address _grantee, address _contractAddress) external returns (enum ConditionStoreLibrary.ConditionState)

fulfill NFT Access conditions

only DID owner or DID provider can call this method. Fulfill method sets the permissions for the granted consumer's address to true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_documentId bytes32 refers to the DID in which secret store will issue the decryption keys
_grantee address is the address of the granted user or the DID provider
_contractAddress address contract address holding the NFT (ERC-721) or the NFT Factory (ERC-1155)
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

INFTHolder

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _did, address _address, bytes32 _conditionId, uint256 _amount)

hashValues

function hashValues(bytes32 _did, address _holderAddress, uint256 _amount, address _contractAddress) external pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the Decentralized Identifier of the asset
_holderAddress address the address of the NFT holder
_amount uint256 is the amount NFTs that need to be hold by the holder
_contractAddress address contract address holding the NFT (ERC-721) or the NFT Factory (ERC-1155)
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _holderAddress, uint256 _amount, address _contractAddress) external returns (enum ConditionStoreLibrary.ConditionState)

fulfill requires a validation that holder has enough NFTs for a specific DID

Name Type Description
_agreementId bytes32 SEA agreement identifier
_did bytes32 the Decentralized Identifier of the asset
_holderAddress address the contract address where the reward is locked
_amount uint256 is the amount of NFT to be hold
_contractAddress address contract address holding the NFT (ERC-721) or the NFT Factory (ERC-1155)
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

INFTLock

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _did, address _lockAddress, bytes32 _conditionId, uint256 _amount, address _receiver, address _nftContractAddress)

hashValues

function hashValues(bytes32 _did, address _lockAddress, uint256 _amount, address _nftContractAddress) external pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the DID of the asset with NFTs attached to lock
_lockAddress address the contract address where the NFT will be locked
_amount uint256 is the amount of the NFTs locked
_nftContractAddress address Is the address of the NFT (ERC-721, ERC-1155) contract to use
Name Type Description
[0] bytes32 bytes32 hash of all these values

hashValuesMarked

function hashValuesMarked(bytes32 _did, address _lockAddress, uint256 _amount, address _receiver, address _nftContractAddress) external pure returns (bytes32)

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _lockAddress, uint256 _amount, address _nftContractAddress) external returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method transfer a certain amount of NFTs to the _nftReceiver address. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_lockAddress address the contract address where the NFT will be locked
_amount uint256 is the amount of the locked tokens
_nftContractAddress address Is the address of the NFT (ERC-721) contract to use
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

fulfillMarked

function fulfillMarked(bytes32 _agreementId, bytes32 _did, address _lockAddress, uint256 _amount, address _receiver, address _nftContractAddress) external returns (enum ConditionStoreLibrary.ConditionState)

ITransferNFT

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _did, address _receiver, uint256 _amount, bytes32 _conditionId, address _contract)

hashValues

function hashValues(bytes32 _did, address _nftHolder, address _nftReceiver, uint256 _nftAmount, bytes32 _lockCondition, address _contract, bool _transfer) external pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftHolder address
_nftReceiver address is the address of the granted user or the DID provider
_nftAmount uint256 amount of NFTs to transfer
_lockCondition bytes32 lock condition identifier
_contract address
_transfer bool Indicates if the NFT will be transferred (true) or minted (false)
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition, address _contract, bool _transfer) external returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method transfer a certain amount of NFTs to the _nftReceiver address. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftReceiver address is the address of the account to receive the NFT
_nftAmount uint256 amount of NFTs to transfer
_lockPaymentCondition bytes32 lock payment condition identifier
_contract address
_transfer bool Indicates if the NFT will be transferred (true) or minted (false)
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

getNFTDefaultAddress

function getNFTDefaultAddress() external view returns (address)

returns if the default NFT contract address

The default NFT contract address was given to the Transfer Condition during the contract initialization

Name Type Description
[0] address the NFT contract address used by default in the transfer condition

NFT721HolderCondition

Implementation of the Nft Holder Condition

CONDITION_TYPE

bytes32 CONDITION_TYPE

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValues

function hashValues(bytes32 _did, address _holderAddress, uint256 _amount, address _contractAddress) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the Decentralized Identifier of the asset
_holderAddress address the address of the NFT holder
_amount uint256 is the amount NFTs that need to be hold by the holder
_contractAddress address contract address holding the NFT (ERC-721) or the NFT Factory (ERC-1155)
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _holderAddress, uint256 _amount, address _contractAddress) external returns (enum ConditionStoreLibrary.ConditionState)

fulfill requires a validation that holder has enough NFTs for a specific DID

Name Type Description
_agreementId bytes32 SEA agreement identifier
_did bytes32 the Decentralized Identifier of the asset
_holderAddress address the contract address where the reward is locked
_amount uint256 is the amount of NFT to be hold
_contractAddress address contract address holding the NFT (ERC-721) or the NFT Factory (ERC-1155)
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

NFT721LockCondition

Implementation of the NFT Lock Condition for ERC-721 based NFTs

CONDITION_TYPE

bytes32 CONDITION_TYPE

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValues

function hashValues(bytes32 _did, address _lockAddress, uint256 _amount, address _nftContractAddress) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the DID of the asset with NFTs attached to lock
_lockAddress address the contract address where the NFT will be locked
_amount uint256 is the amount of the locked tokens
_nftContractAddress address Is the address of the NFT (ERC-721) contract to use
Name Type Description
[0] bytes32 bytes32 hash of all these values

hashValuesMarked

function hashValuesMarked(bytes32 _did, address _lockAddress, uint256 _amount, address _receiver, address _nftContractAddress) public pure returns (bytes32)

fulfillMarked

function fulfillMarked(bytes32 _agreementId, bytes32 _did, address _lockAddress, uint256 _amount, address _receiver, address _nftContractAddress) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method lock a NFT into the _lockAddress.

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_lockAddress address the contract address where the NFT will be locked
_amount uint256 is the amount of the locked tokens (1)
_receiver address
_nftContractAddress address Is the address of the NFT (ERC-721) contract to use
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _lockAddress, uint256 _amount, address _nftContractAddress) external returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method transfer a certain amount of NFTs to the _nftReceiver address. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_lockAddress address the contract address where the NFT will be locked
_amount uint256 is the amount of the locked tokens
_nftContractAddress address Is the address of the NFT (ERC-721) contract to use
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

onERC721Received

function onERC721Received(address, address, uint256, bytes) public virtual returns (bytes4)

Always returns IERC721Receiver.onERC721Received.selector.

NFTAccessCondition

_Implementation of the Access Condition specific for NFTs

 NFT Access Condition is special condition used to give access 
 to a specific NFT related to a DID._

CONDITION_TYPE

bytes32 CONDITION_TYPE

DocumentPermission

struct DocumentPermission {
  bytes32 agreementIdDeprecated;
  mapping(address => bool) permission;
}

nftPermissions

mapping(bytes32 => struct NFTAccessCondition.DocumentPermission) nftPermissions

didRegistry

contract DIDRegistry didRegistry

onlyDIDOwnerOrProvider

modifier onlyDIDOwnerOrProvider(bytes32 _documentId)

initialize

function initialize(address _owner, address _conditionStoreManagerAddress, address _didRegistryAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address
_didRegistryAddress address DID registry address

hashValues

function hashValues(bytes32 _documentId, address _grantee) public view returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_documentId bytes32 refers to the DID in which secret store will issue the decryption keys
_grantee address is the address of the granted user or the DID provider
Name Type Description
[0] bytes32 bytes32 hash of all these values

hashValues

function hashValues(bytes32 _documentId, address _grantee, address _contractAddress) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_documentId bytes32 refers to the DID in which secret store will issue the decryption keys
_grantee address is the address of the granted user or the DID provider
_contractAddress address contract address holding the NFT (ERC-721) or the NFT Factory (ERC-1155)
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _documentId, address _grantee) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill NFT Access condition

only DID owner or DID provider can call this method. Fulfill method sets the permissions for the granted consumer's address to true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_documentId bytes32 refers to the DID in which secret store will issue the decryption keys
_grantee address is the address of the granted user or the DID provider
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

fulfill

function fulfill(bytes32 _agreementId, bytes32 _documentId, address _grantee, address _contractAddress) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill NFT Access condition

only DID owner or DID provider can call this method. Fulfill method sets the permissions for the granted consumer's address to true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_documentId bytes32 refers to the DID in which secret store will issue the decryption keys
_grantee address is the address of the granted user or the DID provider
_contractAddress address is the contract address of the NFT implementation (ERC-1155 or ERC-721)
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

grantPermission

function grantPermission(address _grantee, bytes32 _documentId) public

grantPermission is called only by DID owner or provider

Name Type Description
_grantee address is the address of the granted user or the DID provider
_documentId bytes32 refers to the DID in which secret store will issue the decryption keys

checkPermissions

function checkPermissions(address _grantee, bytes32 _documentId) external view returns (bool permissionGranted)

checkPermissions is called to validate the permissions of user related to the NFT attached to an asset

Name Type Description
_grantee address is the address of the granted user or the DID provider
_documentId bytes32 refers to the DID
Name Type Description
permissionGranted bool true if the access was granted

NFTHolderCondition

Implementation of the Nft Holder Condition

erc1155

contract ERC1155BurnableUpgradeable erc1155

CONDITION_TYPE

bytes32 CONDITION_TYPE

initialize

function initialize(address _owner, address _conditionStoreManagerAddress, address _ercAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address
_ercAddress address Nevermined ERC-1155 address

hashValues

function hashValues(bytes32 _did, address _holderAddress, uint256 _amount) public view returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the Decentralized Identifier of the asset
_holderAddress address the address of the NFT holder
_amount uint256 is the amount NFTs that need to be hold by the holder
Name Type Description
[0] bytes32 bytes32 hash of all these values

hashValues

function hashValues(bytes32 _did, address _holderAddress, uint256 _amount, address _contractAddress) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the Decentralized Identifier of the asset
_holderAddress address the address of the NFT holder
_amount uint256 is the amount NFTs that need to be hold by the holder
_contractAddress address contract address holding the NFT (ERC-721) or the NFT Factory (ERC-1155)
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _holderAddress, uint256 _amount) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill requires a validation that holder has enough NFTs for a specific DID

Name Type Description
_agreementId bytes32 SEA agreement identifier
_did bytes32 the Decentralized Identifier of the asset
_holderAddress address the contract address where the reward is locked
_amount uint256 is the amount of NFT to be hold
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _holderAddress, uint256 _amount, address _contractAddress) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill requires a validation that holder has enough NFTs for a specific DID

Name Type Description
_agreementId bytes32 SEA agreement identifier
_did bytes32 the Decentralized Identifier of the asset
_holderAddress address the contract address where the reward is locked
_amount uint256 is the amount of NFT to be hold
_contractAddress address contract address holding the NFT (ERC-721) or the NFT Factory (ERC-1155)
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

NFTLockCondition

Implementation of the NFT Lock Condition

erc1155

contract IERC1155Upgradeable erc1155

CONDITION_TYPE

bytes32 CONDITION_TYPE

ERC1155_ACCEPTED

bytes4 ERC1155_ACCEPTED

ERC1155_BATCH_ACCEPTED

bytes4 ERC1155_BATCH_ACCEPTED

initialize

function initialize(address _owner, address _conditionStoreManagerAddress, address _ercAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address
_ercAddress address Nevermined ERC-1155 address

hashValues

function hashValues(bytes32 _did, address _lockAddress, uint256 _amount) public view returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the DID of the asset with NFTs attached to lock
_lockAddress address the contract address where the NFT will be locked
_amount uint256 is the amount of the locked tokens
Name Type Description
[0] bytes32 bytes32 hash of all these values

hashValues

function hashValues(bytes32 _did, address _lockAddress, uint256 _amount, address _nftContractAddress) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the DID of the asset with NFTs attached to lock
_lockAddress address the contract address where the NFT will be locked
_amount uint256 is the amount of the locked tokens
_nftContractAddress address Is the address of the NFT (ERC-1155) contract to use
Name Type Description
[0] bytes32 bytes32 hash of all these values

hashValuesMarked

function hashValuesMarked(bytes32 _did, address _lockAddress, uint256 _amount, address _receiver, address _nftContractAddress) public pure returns (bytes32)

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _lockAddress, uint256 _amount) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method transfer a certain amount of NFTs to the _nftReceiver address. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_lockAddress address the contract address where the NFT will be locked
_amount uint256 is the amount of the locked tokens
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _lockAddress, uint256 _amount, address _nft) public returns (enum ConditionStoreLibrary.ConditionState)

fulfillMarked

function fulfillMarked(bytes32 _agreementId, bytes32 _did, address _lockAddress, uint256 _amount, address _receiver, address _nftContractAddress) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method transfer a certain amount of NFTs to the _nftReceiver address. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_lockAddress address the contract address where the NFT will be locked
_amount uint256 is the amount of the locked tokens
_receiver address
_nftContractAddress address Is the address of the NFT (ERC-1155) contract to use
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

onERC1155Received

function onERC1155Received(address, address, uint256, uint256, bytes) external pure returns (bytes4)

onERC1155BatchReceived

function onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) external pure returns (bytes4)

supportsInterface

function supportsInterface(bytes4 interfaceId) external pure returns (bool)

_Returns true if this contract implements the interface defined by interfaceId. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created.

This function call must use less than 30 000 gas._

TransferNFT721Condition

Implementation of condition allowing to transfer an NFT between the original owner and a receiver

CONDITION_TYPE

bytes32 CONDITION_TYPE

MARKET_ROLE

bytes32 MARKET_ROLE

erc721

contract NFT721Upgradeable erc721

_lockConditionAddress

address _lockConditionAddress

PROXY_ROLE

bytes32 PROXY_ROLE

didRegistry

contract DIDRegistry didRegistry

grantProxyRole

function grantProxyRole(address _address) public

revokeProxyRole

function revokeProxyRole(address _address) public

initialize

function initialize(address _owner, address _conditionStoreManagerAddress, address _didRegistryAddress, address _ercAddress, address _lockNFTConditionAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address
_didRegistryAddress address DID Registry address
_ercAddress address Nevermined ERC-721 address
_lockNFTConditionAddress address

getNFTDefaultAddress

function getNFTDefaultAddress() external view returns (address)

returns if the default NFT contract address

The default NFT contract address was given to the Transfer Condition during the contract initialization

Name Type Description
[0] address the NFT contract address used by default in the transfer condition

hashValues

function hashValues(bytes32 _did, address _nftHolder, address _nftReceiver, uint256 _nftAmount, bytes32 _lockCondition, address _contract, bool _transfer) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftHolder address
_nftReceiver address is the address of the granted user or the DID provider
_nftAmount uint256 amount of NFTs to transfer
_lockCondition bytes32 lock condition identifier
_contract address NFT contract to use
_transfer bool
Name Type Description
[0] bytes32 bytes32 hash of all these values

encodeParams

function encodeParams(bytes32 _did, address _nftHolder, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition, address _nftContractAddress, bool _transfer) external pure returns (bytes)

Encodes/serialize all the parameters received

Name Type Description
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftHolder address is the address of the account to receive the NFT
_nftReceiver address is the address of the account to receive the NFT
_nftAmount uint256 amount of NFTs to transfer
_lockPaymentCondition bytes32 lock payment condition identifier
_nftContractAddress address the NFT contract to use
_transfer bool if yes it does a transfer if false it mints the NFT
Name Type Description
[0] bytes the encoded parameters

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition, address _contract, bool _transfer) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method transfer a certain amount of NFTs to the _nftReceiver address. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftReceiver address is the address of the account to receive the NFT
_nftAmount uint256 amount of NFTs to transfer
_lockPaymentCondition bytes32 lock payment condition identifier
_contract address NFT contract to use
_transfer bool Indicates if the NFT will be transferred (true) or minted (false)
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

fulfillProxy

function fulfillProxy(address _account, bytes32 _agreementId, bytes _params) external payable

fulfill the transfer NFT condition by a proxy

Fulfill method transfer a certain amount of NFTs

Name Type Description
_account address NFT Holder
_agreementId bytes32 agreement identifier
_params bytes encoded parameters

fulfillInternal

function fulfillInternal(address _account, bytes32 _agreementId, bytes32 _did, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition, address _contract, bool _transfer, uint256 _expirationBlock) internal returns (enum ConditionStoreLibrary.ConditionState)

fulfillForDelegate

function fulfillForDelegate(bytes32 _agreementId, bytes32 _did, address _nftHolder, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition, bool _transfer) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method transfer a certain amount of NFTs to the _nftReceiver address in the DIDRegistry contract. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftHolder address is the address of the account to receive the NFT
_nftReceiver address is the address of the account to receive the NFT
_nftAmount uint256 amount of NFTs to transfer
_lockPaymentCondition bytes32 lock payment condition identifier
_transfer bool if yes it does a transfer if false it mints the NFT
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

fulfillForDelegate

function fulfillForDelegate(bytes32 _agreementId, bytes32 _did, address _nftHolder, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition, bool _transfer, address _nftContractAddress, uint256 _expirationBlock) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method transfer a certain amount of NFTs to the _nftReceiver address in the DIDRegistry contract. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftHolder address is the address of the account to receive the NFT
_nftReceiver address is the address of the account to receive the NFT
_nftAmount uint256 amount of NFTs to transfer
_lockPaymentCondition bytes32 lock payment condition identifier
_transfer bool if yes it does a transfer if false it mints the NFT
_nftContractAddress address the address of the ERC-721 NFT contract
_expirationBlock uint256 in which block the nft expires, if 0 it doesn't expire
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

TransferNFTCondition

Implementation of condition allowing to transfer an NFT between the original owner and a receiver

CONDITION_TYPE

bytes32 CONDITION_TYPE

MARKET_ROLE

bytes32 MARKET_ROLE

erc1155

contract NFTUpgradeable erc1155

didRegistry

contract DIDRegistry didRegistry

PROXY_ROLE

bytes32 PROXY_ROLE

grantProxyRole

function grantProxyRole(address _address) public

revokeProxyRole

function revokeProxyRole(address _address) public

initialize

function initialize(address _owner, address _conditionStoreManagerAddress, address _didRegistryAddress, address _ercAddress, address _nftContractAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address
_didRegistryAddress address DID Registry address
_ercAddress address Nevermined ERC-1155 address
_nftContractAddress address Market address

grantMarketRole

function grantMarketRole(address _nftContractAddress) public

revokeMarketRole

function revokeMarketRole(address _nftContractAddress) public

getNFTDefaultAddress

function getNFTDefaultAddress() external view returns (address)

returns if the default NFT contract address

The default NFT contract address was given to the Transfer Condition during the contract initialization

Name Type Description
[0] address the NFT contract address used by default in the transfer condition

hashValues

function hashValues(bytes32 _did, address _nftHolder, address _nftReceiver, uint256 _nftAmount, bytes32 _lockCondition) public view returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftHolder address
_nftReceiver address is the address of the granted user or the DID provider
_nftAmount uint256 amount of NFTs to transfer
_lockCondition bytes32 lock condition identifier
Name Type Description
[0] bytes32 bytes32 hash of all these values

hashValues

function hashValues(bytes32 _did, address _nftHolder, address _nftReceiver, uint256 _nftAmount, bytes32 _lockCondition, address _nftContractAddress, bool _transfer) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftHolder address
_nftReceiver address is the address of the granted user or the DID provider
_nftAmount uint256 amount of NFTs to transfer
_lockCondition bytes32 lock condition identifier
_nftContractAddress address NFT contract to use
_transfer bool Indicates if the NFT will be transferred (true) or minted (false)
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition) public returns (enum ConditionStoreLibrary.ConditionState)

encodeParams

function encodeParams(bytes32 _did, address _nftHolder, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition, address _nftContractAddress, bool _transfer) external pure returns (bytes)

Encodes/serialize all the parameters received

Name Type Description
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftHolder address is the address of the account to receive the NFT
_nftReceiver address is the address of the account to receive the NFT
_nftAmount uint256 amount of NFTs to transfer
_lockPaymentCondition bytes32 lock payment condition identifier
_nftContractAddress address the NFT contract to use
_transfer bool if yes it does a transfer if false it mints the NFT
Name Type Description
[0] bytes the encoded parameters

fulfillProxy

function fulfillProxy(address _account, bytes32 _agreementId, bytes _params) external payable

fulfill the transfer NFT condition by a proxy

Fulfill method transfer a certain amount of NFTs

Name Type Description
_account address NFT Holder
_agreementId bytes32 agreement identifier
_params bytes encoded parameters

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition, address _nftContractAddress, bool _transfer) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method transfer a certain amount of NFTs to the _nftReceiver address. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftReceiver address is the address of the account to receive the NFT
_nftAmount uint256 amount of NFTs to transfer
_lockPaymentCondition bytes32 lock payment condition identifier
_nftContractAddress address NFT contract to use
_transfer bool Indicates if the NFT will be transferred (true) or minted (false)
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

fulfillInternal

function fulfillInternal(address _account, bytes32 _agreementId, bytes32 _did, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition, address _nftContractAddress, bool _transfer) internal returns (enum ConditionStoreLibrary.ConditionState)

fulfillForDelegate

function fulfillForDelegate(bytes32 _agreementId, bytes32 _did, address _nftHolder, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition, bool _transfer) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method transfer a certain amount of NFTs to the _nftReceiver address in the DIDRegistry contract. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftHolder address is the address of the account to receive the NFT
_nftReceiver address is the address of the account to receive the NFT
_nftAmount uint256 amount of NFTs to transfer
_lockPaymentCondition bytes32 lock payment condition identifier
_transfer bool if yes it does a transfer if false it mints the NFT
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

fulfillForDelegate

function fulfillForDelegate(bytes32 _agreementId, bytes32 _did, address _nftHolder, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition, address _nftContractAddress, bool _transfer) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer NFT condition

Fulfill method transfer a certain amount of NFTs to the _nftReceiver address in the DIDRegistry contract. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_nftHolder address is the address of the account to receive the NFT
_nftReceiver address is the address of the account to receive the NFT
_nftAmount uint256 amount of NFTs to transfer
_lockPaymentCondition bytes32 lock payment condition identifier
_nftContractAddress address the address of the ERC-721 NFT contract
_transfer bool if yes it does a transfer if false it mints the NFT
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

SignCondition

Implementation of the Sign Condition

CONDITION_TYPE

bytes32 CONDITION_TYPE

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValues

function hashValues(bytes32 _message, address _publicKey) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_message bytes32 the message to be signed
_publicKey address the public key of the signing address
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _message, address _publicKey, bytes _signature) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill validate the signed message and fulfill the condition

Name Type Description
_agreementId bytes32 SEA agreement identifier
_message bytes32 the message to be signed
_publicKey address the public key of the signing address
_signature bytes signature of the signed message using the public key
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

ThresholdCondition

_Implementation of the Threshold Condition

 Threshold condition acts as a filter for a set of input condition(s) in which sends 
 a signal whether to complete the flow execution or abort it. This type of conditions 
 works as intermediary conditions where they wire SEA conditions in order to support  
 more complex scenarios._

CONDITION_TYPE

bytes32 CONDITION_TYPE

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValues

function hashValues(bytes32[] inputConditions, uint256 threshold) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
inputConditions bytes32[] array of input conditions IDs
threshold uint256 the required number of fulfilled input conditions
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32[] _inputConditions, uint256 threshold) external returns (enum ConditionStoreLibrary.ConditionState)

fulfill threshold condition

the fulfill method check whether input conditions are fulfilled or not.

Name Type Description
_agreementId bytes32 agreement identifier
_inputConditions bytes32[] array of input conditions IDs
threshold uint256 the required number of fulfilled input conditions
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

canFulfill

function canFulfill(bytes32[] _inputConditions, uint256 threshold) private view returns (bool _fulfill)

canFulfill check if condition can be fulfilled

Name Type Description
_inputConditions bytes32[] array of input conditions IDs
threshold uint256 the required number of fulfilled input conditions
Name Type Description
_fulfill bool true if can fulfill

TransferDIDOwnershipCondition

Implementation of condition allowing to transfer the ownership between the original owner and a receiver

CONDITION_TYPE

bytes32 CONDITION_TYPE

didRegistry

contract DIDRegistry didRegistry

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _did, address _receiver, bytes32 _conditionId)

initialize

function initialize(address _owner, address _conditionStoreManagerAddress, address _didRegistryAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address
_didRegistryAddress address DID Registry address

hashValues

function hashValues(bytes32 _did, address _receiver) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_receiver address is the address of the granted user or the DID provider
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _receiver) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill the transfer DID ownership condition

only DID owner or DID provider can call this method. Fulfill method transfer full ownership permissions to to _receiver address. When true then fulfill the condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 refers to the DID in which secret store will issue the decryption keys
_receiver address is the address of the granted user
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

WhitelistingCondition

Implementation of the Whitelisting Condition

CONDITION_TYPE

bytes32 CONDITION_TYPE

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValues

function hashValues(address _listAddress, bytes32 _item) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_listAddress address list contract address
_item bytes32 item in the list
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, address _listAddress, bytes32 _item) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill check whether address is whitelisted in order to fulfill the condition. This method will be called by any one in this whitelist.

Name Type Description
_agreementId bytes32 SEA agreement identifier
_listAddress address list contract address
_item bytes32 item in the list
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

AaveBorrowCondition

Implementation of the Aave Borrow Credit Condition

aaveCreditVault

contract AaveCreditVault aaveCreditVault

CONDITION_TYPE

bytes32 CONDITION_TYPE

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _did, bytes32 _conditionId)

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValues

function hashValues(bytes32 _did, address _vaultAddress, address _assetToBorrow, uint256 _amount, uint256 _interestRateMode) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the DID of the asset
_vaultAddress address the address of vault locking the deposited collateral and the asset
_assetToBorrow address the address of the asset to borrow (i.e DAI)
_amount uint256 the amount of the ERC-20 the assets to borrow (i.e 50 DAI)
_interestRateMode uint256 interest rate type stable 1, variable 2
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _vaultAddress, address _assetToBorrow, uint256 _amount, uint256 _interestRateMode) external returns (enum ConditionStoreLibrary.ConditionState)

It allows the borrower to borrow the asset deposited by the lender

Name Type Description
_agreementId bytes32 the identifier of the agreement
_did bytes32 the DID of the asset
_vaultAddress address the address of vault locking the deposited collateral and the asset
_assetToBorrow address the address of the asset to borrow (i.e DAI)
_amount uint256 the amount of the ERC-20 the assets to borrow (i.e 50 DAI)
_interestRateMode uint256 interest rate type stable 1, variable 2
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState ConditionStoreLibrary.ConditionState the state of the condition (Fulfilled if everything went good)

AaveCollateralDepositCondition

Implementation of the Aave Collateral Deposit Condition This condition allows a Lender to deposit the collateral that into account the royalties to be paid to the original creators in a secondary market.

aaveCreditVault

contract AaveCreditVault aaveCreditVault

CONDITION_TYPE

bytes32 CONDITION_TYPE

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _did, bytes32 _conditionId)

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValues

function hashValues(bytes32 _did, address _vaultAddress, address _collateralAsset, uint256 _collateralAmount, address _delegatedAsset, uint256 _delegatedAmount, uint256 _interestRateMode) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the DID of the asset
_vaultAddress address Address of the vault
_collateralAsset address the address of the ERC-20 that will be used as collateral (i.e WETH)
_collateralAmount uint256 the amount of the ERC-20 that will be used as collateral (i.e 10 WETH)
_delegatedAsset address the address of the ERC-20 that will be delegated to the borrower (i.e DAI)
_delegatedAmount uint256 the amount of the ERC-20 that will be delegated to the borrower (i.e 500 DAI)
_interestRateMode uint256 interest rate type stable 1, variable 2
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _vaultAddress, address _collateralAsset, uint256 _collateralAmount, address _delegatedAsset, uint256 _delegatedAmount, uint256 _interestRateMode) external payable returns (enum ConditionStoreLibrary.ConditionState)

It fulfills the condition if the collateral can be deposited into the vault

Name Type Description
_agreementId bytes32 the identifier of the agreement
_did bytes32 the DID of the asset
_vaultAddress address Address of the vault
_collateralAsset address the address of the ERC-20 that will be used as collateral (i.e WETH)
_collateralAmount uint256 the amount of the ERC-20 that will be used as collateral (i.e 10 WETH)
_delegatedAsset address the address of the ERC-20 that will be delegated to the borrower (i.e DAI)
_delegatedAmount uint256 the amount of the ERC-20 that will be delegated to the borrower (i.e 500 DAI)
_interestRateMode uint256 interest rate type stable 1, variable 2
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState ConditionStoreLibrary.ConditionState the state of the condition (Fulfilled if everything went good)

AaveCollateralWithdrawCondition

Implementation of the Collateral Withdraw Condition This condition allows to credit delegator withdraw the collateral and fees after the agreement expiration

aaveCreditVault

contract AaveCreditVault aaveCreditVault

CONDITION_TYPE

bytes32 CONDITION_TYPE

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _did, bytes32 _conditionId)

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValues

function hashValues(bytes32 _did, address _vaultAddress, address _collateralAsset) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the DID of the asset
_vaultAddress address Address of the vault
_collateralAsset address the address of the asset used as collateral (i.e DAI)
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _vaultAddress, address _collateralAsset) external payable returns (enum ConditionStoreLibrary.ConditionState)

It allows the borrower to repay the loan

Name Type Description
_agreementId bytes32 the identifier of the agreement
_did bytes32 the DID of the asset
_vaultAddress address Address of the vault
_collateralAsset address the address of the asset used as collateral (i.e DAI)
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState ConditionStoreLibrary.ConditionState the state of the condition (Fulfilled if everything went good)

AaveCreditVault

lendingPool

contract ILendingPool lendingPool

dataProvider

contract IProtocolDataProvider dataProvider

weth

contract IWETHGateway weth

addressProvider

contract ILendingPoolAddressesProvider addressProvider

priceOracle

contract IPriceOracleGetter priceOracle

borrowedAsset

address borrowedAsset

borrowedAmount

uint256 borrowedAmount

nvmFee

uint256 nvmFee

agreementFee

uint256 agreementFee

FEE_BASE

uint256 FEE_BASE

treasuryAddress

address treasuryAddress

borrower

address borrower

lender

address lender

repayConditionId

bytes32 repayConditionId

nftId

uint256 nftId

nftAddress

address nftAddress

BORROWER_ROLE

bytes32 BORROWER_ROLE

LENDER_ROLE

bytes32 LENDER_ROLE

CONDITION_ROLE

bytes32 CONDITION_ROLE

initialize

function initialize(address _lendingPool, address _dataProvider, address _weth, uint256 _nvmFee, uint256 _agreementFee, address _treasuryAddress, address _borrower, address _lender, address[] _conditions) public

Vault constructor, creates a unique vault for each agreement

Name Type Description
_lendingPool address Aave lending pool address
_dataProvider address Aave data provider address
_weth address WETH address
_nvmFee uint256 Nevermined fee that will apply to this agreeement
_agreementFee uint256 Agreement fee that lender will receive on agreement maturity
_treasuryAddress address Address of nevermined contract to store fees
_borrower address
_lender address
_conditions address[]

isLender

function isLender(address _address) public view returns (bool)

isBorrower

function isBorrower(address _address) public view returns (bool)

deposit

function deposit(address _collateralAsset, uint256 _amount) public payable

Deposit function. Receives the funds from the delegator and deposits the funds in the Aave contracts

Name Type Description
_collateralAsset address collateral asset that will be deposit on Aave
_amount uint256 Amount of collateral to deposit

approveBorrower

function approveBorrower(address _borrower, uint256 _amount, address _asset, uint256 _interestRateMode) public

Appproves delegatee to borrow funds from Aave on behalf of delegator

Name Type Description
_borrower address delegatee that will borrow the funds
_amount uint256 Amount of funds to delegate
_asset address Asset to delegate the borrow
_interestRateMode uint256 interest rate type stable 1, variable 2

delegatedAmount

function delegatedAmount(address _borrower, address _asset, uint256 _interestRateMode) public view returns (uint256)

Return the actual delegated amount for the borrower in the specific asset

Name Type Description
_borrower address The borrower of the funds (i.e. delgatee)
_asset address The asset they are allowed to borrow
_interestRateMode uint256 interest rate type stable 1, variable 2

borrow

function borrow(address _assetToBorrow, uint256 _amount, address _delgatee, uint256 _interestRateMode) public

Borrower can call this function to borrow the delegated funds

Name Type Description
_assetToBorrow address The asset they are allowed to borrow
_amount uint256 Amount to borrow
_delgatee address Address where the funds will be transfered
_interestRateMode uint256 interest rate type stable 1, variable 2

repay

function repay(address _asset, uint256 _interestRateMode, bytes32 _repayConditionId) public

Repay an uncollaterised loan

Name Type Description
_asset address The asset to be repaid
_interestRateMode uint256 interest rate type stable 1, variable 2
_repayConditionId bytes32 identifier of the condition id working as lock for other vault methods

setRepayConditionId

function setRepayConditionId(bytes32 _repayConditionId) public

getBorrowedAmount

function getBorrowedAmount() public view returns (uint256)

Returns the borrowed amount from the delegatee on this agreement

getAssetPrice

function getAssetPrice(address _asset) public view returns (uint256)

Returns the priceof the asset in the Aave oracles

Name Type Description
_asset address The asset to get the actual price

getCreditAssetDebt

function getCreditAssetDebt() public view returns (uint256)

Returns the total debt of the credit in the Aave protocol expressed in token units

getActualCreditDebt

function getActualCreditDebt() public view returns (uint256)

Returns the total debt of the credit in the Aave protocol expressed in ETH units

getTotalActualDebt

function getTotalActualDebt() public view returns (uint256)

Returns the total actual debt of the agreement credit + fees in token units

withdrawCollateral

function withdrawCollateral(address _asset, address _delegator) public

Withdraw all of a collateral as the underlying asset, if no outstanding loans delegated

Name Type Description
_asset address The underlying asset to withdraw
_delegator address Delegator address that deposited the collateral

transferNFT

function transferNFT(uint256 _tokenId, address _receiver) public

Transfer a NFT (ERC-721) locked into the vault to a receiver address

Name Type Description
_tokenId uint256 the token id
_receiver address the receiver adddress

_transferERC20

function _transferERC20(address _collateralAsset, uint256 _amount) internal

Transfers the ERC20 token deposited to the Aave contracts

Name Type Description
_collateralAsset address collateral asset that will be deposit on Aave
_amount uint256 Amount of collateral to deposit

onERC721Received

function onERC721Received(address, address, uint256 _tokenId, bytes) public virtual returns (bytes4)

Handle the receipt of an NFT

_The ERC721 smart contract calls this function on the recipient after a {IERC721-safeTransferFrom}. This function MUST return the function selector, otherwise the caller will revert the transaction.

Note: the ERC721 contract address is always the message sender. (param not used): operator The address which called safeTransferFrom function (param not used): from The address which previously owned the token_

Name Type Description
address
address
_tokenId uint256 The NFT identifier which is being transferred (param not used): data Additional data with no specified format
bytes
Name Type Description
[0] bytes4 bytes4 bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))

AaveRepayCondition

Implementation of the Aave Repay Condition This condition allows to a borrower to repay a credit as part of a credit template

aaveCreditVault

contract AaveCreditVault aaveCreditVault

CONDITION_TYPE

bytes32 CONDITION_TYPE

Fulfilled

event Fulfilled(bytes32 _agreementId, bytes32 _did, bytes32 _conditionId)

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

this function is called only once during the contract initialization.

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValues

function hashValues(bytes32 _did, address _vaultAddress, address _assetToRepay, uint256 _amountToRepay, uint256 _interestRateMode) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the DID of the asset
_vaultAddress address the address of vault locking the deposited collateral and the asset
_assetToRepay address the address of the asset to repay (i.e DAI)
_amountToRepay uint256 Amount to repay
_interestRateMode uint256 interest rate type stable 1, variable 2
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, address _vaultAddress, address _assetToRepay, uint256 _amountToRepay, uint256 _interestRateMode) external returns (enum ConditionStoreLibrary.ConditionState)

It allows the borrower to repay the loan

Name Type Description
_agreementId bytes32 the identifier of the agreement
_did bytes32 the DID of the asset
_vaultAddress address the address of vault locking the deposited collateral and the asset
_assetToRepay address the address of the asset to repay (i.e DAI)
_amountToRepay uint256 Amount to repay
_interestRateMode uint256 interest rate type stable 1, variable 2
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState ConditionStoreLibrary.ConditionState the state of the condition (Fulfilled if everything went good)

EscrowPaymentCondition

_Implementation of the Escrow Payment Condition

 The Escrow payment is reward condition in which only 
 can release reward if lock and release conditions
 are fulfilled._

CONDITION_TYPE

bytes32 CONDITION_TYPE

USED_PAYMENT_ID

bytes32 USED_PAYMENT_ID

Fulfilled

event Fulfilled(bytes32 _agreementId, address _tokenAddress, address[] _receivers, bytes32 _conditionId, uint256[] _amounts)

Received

event Received(address _from, uint256 _value)

receive

receive() external payable

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValuesMulti

function hashValuesMulti(bytes32 _did, uint256[] _amounts, address[] _receivers, address _returnAddress, address _lockPaymentAddress, address _tokenAddress, bytes32 _lockCondition, bytes32[] _releaseConditions) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 asset decentralized identifier
_amounts uint256[] token amounts to be locked/released
_receivers address[] receiver's addresses
_returnAddress address
_lockPaymentAddress address lock payment contract address
_tokenAddress address the ERC20 contract address to use during the payment
_lockCondition bytes32 lock condition identifier
_releaseConditions bytes32[] release condition identifier
Name Type Description
[0] bytes32 bytes32 hash of all these values

encodeParams

function encodeParams(bytes32 _did, uint256[] _amounts, address[] _receivers, address _returnAddress, address _lockPaymentAddress, address _tokenAddress, bytes32 _lockCondition, bytes32[] _releaseConditions) public pure returns (bytes)

hashValues

function hashValues(bytes32 _did, uint256[] _amounts, address[] _receivers, address _returnAddress, address _lockPaymentAddress, address _tokenAddress, bytes32 _lockCondition, bytes32 _releaseCondition) public pure returns (bytes32)

hashValuesLockPayment

function hashValuesLockPayment(bytes32 _did, address _rewardAddress, address _tokenAddress, uint256[] _amounts, address[] _receivers) public pure returns (bytes32)

hashValuesLockPayment generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the asset decentralized identifier
_rewardAddress address the contract address where the reward is locked
_tokenAddress address the ERC20 contract address to use during the lock payment. If the address is 0x0 means we won't use a ERC20 but ETH for payment
_amounts uint256[] token amounts to be locked/released
_receivers address[] receiver's addresses
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfillMulti

function fulfillMulti(bytes32 _agreementId, bytes32 _did, uint256[] _amounts, address[] _receivers, address _returnAddress, address _lockPaymentAddress, address _tokenAddress, bytes32 _lockCondition, bytes32[] _releaseConditions) public returns (enum ConditionStoreLibrary.ConditionState)

fulfill escrow reward condition

fulfill method checks whether the lock and release conditions are fulfilled in order to release/refund the reward to receiver/sender respectively.

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 asset decentralized identifier
_amounts uint256[] token amounts to be locked/released
_receivers address[] receiver's address
_returnAddress address
_lockPaymentAddress address lock payment contract address
_tokenAddress address the ERC20 contract address to use during the payment
_lockCondition bytes32 lock condition identifier
_releaseConditions bytes32[] release condition identifier
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

Args

struct Args {
  bytes32 _agreementId;
  bytes32 _did;
  uint256[] _amounts;
  address[] _receivers;
  address _returnAddress;
  address _lockPaymentAddress;
  address _tokenAddress;
  bytes32 _lockCondition;
  bytes32[] _releaseConditions;
}

fulfillKludge

function fulfillKludge(struct EscrowPaymentCondition.Args a) internal returns (enum ConditionStoreLibrary.ConditionState)

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, uint256[] _amounts, address[] _receivers, address _returnAddress, address _lockPaymentAddress, address _tokenAddress, bytes32 _lockCondition, bytes32 _releaseCondition) external returns (enum ConditionStoreLibrary.ConditionState)

_transferAndFulfillERC20

function _transferAndFulfillERC20(bytes32 _id, address _tokenAddress, address[] _receivers, uint256[] _amounts) private returns (enum ConditionStoreLibrary.ConditionState)

_transferAndFulfill transfer ERC20 tokens and fulfill the condition

Name Type Description
_id bytes32 condition identifier
_tokenAddress address the ERC20 contract address to use during the payment
_receivers address[] receiver's address
_amounts uint256[] token amount to be locked/released
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

_transferAndFulfillETH

function _transferAndFulfillETH(bytes32 _id, address[] _receivers, uint256[] _amounts) private returns (enum ConditionStoreLibrary.ConditionState)

_transferAndFulfill transfer ETH and fulfill the condition

Name Type Description
_id bytes32 condition identifier
_receivers address[] receiver's address
_amounts uint256[] token amount to be locked/released
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

INFTEscrow

Common interface for ERC-721 and ERC-1155

Fulfilled

event Fulfilled(bytes32 _agreementId, address _tokenAddress, bytes32 _did, address _receivers, bytes32 _conditionId, uint256 _amounts)

NFT721EscrowPaymentCondition

_Implementation of the Escrow Payment Condition

 The Escrow payment is reward condition in which only 
 can release reward if lock and release conditions
 are fulfilled._

CONDITION_TYPE

bytes32 CONDITION_TYPE

Received

event Received(address _from, uint256 _value)

receive

receive() external payable

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValues

function hashValues(bytes32 _did, uint256 _amounts, address _receivers, address _returnAddress, address _lockPaymentAddress, address _tokenAddress, bytes32 _lockCondition, bytes32[] _releaseConditions) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 asset decentralized identifier
_amounts uint256 token amounts to be locked/released
_receivers address receiver's addresses
_returnAddress address
_lockPaymentAddress address lock payment contract address
_tokenAddress address the ERC20 contract address to use during the payment
_lockCondition bytes32 lock condition identifier
_releaseConditions bytes32[] release condition identifier
Name Type Description
[0] bytes32 bytes32 hash of all these values

hashValuesLockPayment

function hashValuesLockPayment(bytes32 _did, address _lockAddress, address _nftContractAddress, uint256 _amount, address _receiver) public pure returns (bytes32)

hashValuesLockPayment generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the asset decentralized identifier
_lockAddress address the contract address where the reward is locked
_nftContractAddress address the ERC20 contract address to use during the lock payment. If the address is 0x0 means we won't use a ERC20 but ETH for payment
_amount uint256 token amounts to be locked/released
_receiver address receiver's addresses
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, uint256 _amount, address _receiver, address _returnAddress, address _lockPaymentAddress, address _tokenAddress, bytes32 _lockCondition, bytes32[] _releaseConditions) external returns (enum ConditionStoreLibrary.ConditionState)

fulfill escrow reward condition

fulfill method checks whether the lock and release conditions are fulfilled in order to release/refund the reward to receiver/sender respectively.

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 asset decentralized identifier
_amount uint256 token amounts to be locked/released
_receiver address receiver's address
_returnAddress address
_lockPaymentAddress address lock payment contract address
_tokenAddress address the ERC20 contract address to use during the payment
_lockCondition bytes32 lock condition identifier
_releaseConditions bytes32[] release condition identifier
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

Args

struct Args {
  bytes32 _agreementId;
  bytes32 _did;
  uint256 _amount;
  address _receiver;
  address _returnAddress;
  address _lockPaymentAddress;
  address _tokenAddress;
  bytes32 _lockCondition;
  bytes32[] _releaseConditions;
}

fulfillKludge

function fulfillKludge(struct NFT721EscrowPaymentCondition.Args a) internal returns (enum ConditionStoreLibrary.ConditionState)

_transferAndFulfillNFT

function _transferAndFulfillNFT(bytes32 _agreementId, bytes32 _id, bytes32 _did, address _tokenAddress, address _receiver, uint256 _amount) private returns (enum ConditionStoreLibrary.ConditionState)

_transferAndFulfill transfer ERC20 tokens and fulfill the condition

Name Type Description
_agreementId bytes32
_id bytes32 condition identifier
_did bytes32
_tokenAddress address the ERC20 contract address to use during the payment
_receiver address receiver's address
_amount uint256 token amount to be locked/released
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

onERC721Received

function onERC721Received(address, address, uint256, bytes) public virtual returns (bytes4)

NFTEscrowPaymentCondition

_Implementation of the Escrow Payment Condition

 The Escrow payment is reward condition in which only 
 can release reward if lock and release conditions
 are fulfilled._

CONDITION_TYPE

bytes32 CONDITION_TYPE

LOCK_CONDITION_TYPE

bytes32 LOCK_CONDITION_TYPE

Received

event Received(address _from, uint256 _value)

receive

receive() external payable

initialize

function initialize(address _owner, address _conditionStoreManagerAddress) external

initialize init the contract with the following parameters

Name Type Description
_owner address contract's owner account address
_conditionStoreManagerAddress address condition store manager address

hashValues

function hashValues(bytes32 _did, uint256 _amounts, address _receivers, address _returnAddress, address _lockPaymentAddress, address _tokenAddress, bytes32 _lockCondition, bytes32[] _releaseConditions) public pure returns (bytes32)

hashValues generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 asset decentralized identifier
_amounts uint256 token amounts to be locked/released
_receivers address receiver's addresses
_returnAddress address
_lockPaymentAddress address lock payment contract address
_tokenAddress address the ERC20 contract address to use during the payment
_lockCondition bytes32 lock condition identifier
_releaseConditions bytes32[] release condition identifier
Name Type Description
[0] bytes32 bytes32 hash of all these values

hashValuesLockPayment

function hashValuesLockPayment(bytes32 _did, address _lockAddress, address _nftContractAddress, uint256 _amount, address _receiver) public pure returns (bytes32)

hashValuesLockPayment generates the hash of condition inputs with the following parameters

Name Type Description
_did bytes32 the asset decentralized identifier
_lockAddress address the contract address where the reward is locked
_nftContractAddress address the ERC20 contract address to use during the lock payment. If the address is 0x0 means we won't use a ERC20 but ETH for payment
_amount uint256 token amounts to be locked/released
_receiver address receiver's addresses
Name Type Description
[0] bytes32 bytes32 hash of all these values

fulfill

function fulfill(bytes32 _agreementId, bytes32 _did, uint256 _amount, address _receiver, address _returnAddress, address _lockPaymentAddress, address _tokenAddress, bytes32 _lockCondition, bytes32[] _releaseConditions) external returns (enum ConditionStoreLibrary.ConditionState)

fulfill escrow reward condition

fulfill method checks whether the lock and release conditions are fulfilled in order to release/refund the reward to receiver/sender respectively.

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 asset decentralized identifier
_amount uint256 token amounts to be locked/released
_receiver address receiver's address
_returnAddress address
_lockPaymentAddress address lock payment contract address
_tokenAddress address the ERC20 contract address to use during the payment
_lockCondition bytes32 lock condition identifier
_releaseConditions bytes32[] release condition identifier
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

Args

struct Args {
  bytes32 _agreementId;
  bytes32 _did;
  uint256 _amount;
  address _receiver;
  address _returnAddress;
  address _lockPaymentAddress;
  address _tokenAddress;
  bytes32 _lockCondition;
  bytes32[] _releaseConditions;
}

fulfillKludge

function fulfillKludge(struct NFTEscrowPaymentCondition.Args a) internal returns (enum ConditionStoreLibrary.ConditionState)

_transferAndFulfillNFT

function _transferAndFulfillNFT(bytes32 _agreementId, bytes32 _id, bytes32 _did, address _tokenAddress, address _receiver, uint256 _amount) private returns (enum ConditionStoreLibrary.ConditionState)

_transferAndFulfill transfer ERC20 tokens and fulfill the condition

Name Type Description
_agreementId bytes32
_id bytes32 condition identifier
_did bytes32
_tokenAddress address the ERC20 contract address to use during the payment
_receiver address receiver's address
_amount uint256 token amount to be locked/released
Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state (Fulfilled/Aborted)

ERC1155_ACCEPTED

bytes4 ERC1155_ACCEPTED

ERC1155_BATCH_ACCEPTED

bytes4 ERC1155_BATCH_ACCEPTED

onERC1155Received

function onERC1155Received(address, address, uint256, uint256, bytes) external pure returns (bytes4)

onERC1155BatchReceived

function onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) external pure returns (bytes4)

supportsInterface

function supportsInterface(bytes4 interfaceId) external pure returns (bool)

_Returns true if this contract implements the interface defined by interfaceId. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created.

This function call must use less than 30 000 gas._

Reward

_Implementation of the Reward.

 Generic reward condition_

INVMConfig

GOVERNOR_ROLE

bytes32 GOVERNOR_ROLE

NeverminedConfigChange

event NeverminedConfigChange(address _whoChanged, bytes32 _parameter)

Event that is emitted when a parameter is changed

Name Type Description
_whoChanged address the address of the governor changing the parameter
_parameter bytes32 the hash of the name of the parameter changed

initialize

function initialize(address _owner, address _governor) external virtual

Used to initialize the contract during delegator constructor

Name Type Description
_owner address The owner of the contract
_governor address The address to be granted with the GOVERNOR_ROLE

setMarketplaceFees

function setMarketplaceFees(uint256 _marketplaceFee, address _feeReceiver) external virtual

The governor can update the Nevermined Marketplace fees

Name Type Description
_marketplaceFee uint256 new marketplace fee
_feeReceiver address The address receiving the fee

isGovernor

function isGovernor(address _address) external view virtual returns (bool)

Indicates if an address is a having the GOVERNOR role

Name Type Description
_address address The address to validate
Name Type Description
[0] bool true if is a governor

getMarketplaceFee

function getMarketplaceFee() external view virtual returns (uint256)

Returns the marketplace fee

Name Type Description
[0] uint256 the marketplace fee

getFeeReceiver

function getFeeReceiver() external view virtual returns (address)

Returns the receiver address of the marketplace fee

Name Type Description
[0] address the receiver address

NeverminedConfig

marketplaceFee

uint256 marketplaceFee

feeReceiver

address feeReceiver

initialize

function initialize(address _owner, address _governor) public

Used to initialize the contract during delegator constructor

Name Type Description
_owner address The owner of the contract
_governor address The address to be granted with the GOVERNOR_ROLE

setMarketplaceFees

function setMarketplaceFees(uint256 _marketplaceFee, address _feeReceiver) external virtual

The governor can update the Nevermined Marketplace fees

Name Type Description
_marketplaceFee uint256 new marketplace fee
_feeReceiver address The address receiving the fee

setGovernor

function setGovernor(address _address) external

isGovernor

function isGovernor(address _address) external view returns (bool)

Indicates if an address is a having the GOVERNOR role

Name Type Description
_address address The address to validate
Name Type Description
[0] bool true if is a governor

getMarketplaceFee

function getMarketplaceFee() external view returns (uint256)

Returns the marketplace fee

Name Type Description
[0] uint256 the marketplace fee

getFeeReceiver

function getFeeReceiver() external view returns (address)

Returns the receiver address of the marketplace fee

Name Type Description
[0] address the receiver address

onlyGovernor

modifier onlyGovernor(address _address)

IERC20

totalSupply

function totalSupply() external view returns (uint256)

Returns the amount of tokens in existence.

balanceOf

function balanceOf(address account) external view returns (uint256)

Returns the amount of tokens owned by account.

transfer

function transfer(address recipient, uint256 amount) external returns (bool)

_Moves amount tokens from the caller's account to recipient.

Returns a boolean value indicating whether the operation succeeded.

Emits a {Transfer} event._

allowance

function allowance(address owner, address spender) external view returns (uint256)

_Returns the remaining number of tokens that spender will be allowed to spend on behalf of owner through {transferFrom}. This is zero by default.

This value changes when {approve} or {transferFrom} are called._

approve

function approve(address spender, uint256 amount) external returns (bool)

_Sets amount as the allowance of spender over the caller's tokens.

Returns a boolean value indicating whether the operation succeeded.

IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729

Emits an {Approval} event._

transferFrom

function transferFrom(address sender, address recipient, uint256 amount) external returns (bool)

_Moves amount tokens from sender to recipient using the allowance mechanism. amount is then deducted from the caller's allowance.

Returns a boolean value indicating whether the operation succeeded.

Emits a {Transfer} event._

Transfer

event Transfer(address from, address to, uint256 value)

_Emitted when value tokens are moved from one account (from) to another (to).

Note that value may be zero._

Approval

event Approval(address owner, address spender, uint256 value)

Emitted when the allowance of a spender for an owner is set by a call to {approve}. value is the new allowance.

IPriceOracleGetter

Interface for the Aave price oracle.

getAssetPrice

function getAssetPrice(address asset) external view returns (uint256)

returns the asset price in ETH

Name Type Description
asset address the address of the asset
Name Type Description
[0] uint256 the ETH price of the asset

IProtocolDataProvider

TokenData

struct TokenData {
  string symbol;
  address tokenAddress;
}

ADDRESSES_PROVIDER

function ADDRESSES_PROVIDER() external view returns (contract ILendingPoolAddressesProvider)

getAllReservesTokens

function getAllReservesTokens() external view returns (struct IProtocolDataProvider.TokenData[])

getAllATokens

function getAllATokens() external view returns (struct IProtocolDataProvider.TokenData[])

getReserveConfigurationData

function getReserveConfigurationData(address asset) external view returns (uint256 decimals, uint256 ltv, uint256 liquidationThreshold, uint256 liquidationBonus, uint256 reserveFactor, bool usageAsCollateralEnabled, bool borrowingEnabled, bool stableBorrowRateEnabled, bool isActive, bool isFrozen)

getReserveData

function getReserveData(address asset) external view returns (uint256 availableLiquidity, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex, uint40 lastUpdateTimestamp)

getUserReserveData

function getUserReserveData(address asset, address user) external view returns (uint256 currentATokenBalance, uint256 currentStableDebt, uint256 currentVariableDebt, uint256 principalStableDebt, uint256 scaledVariableDebt, uint256 stableBorrowRate, uint256 liquidityRate, uint40 stableRateLastUpdated, bool usageAsCollateralEnabled)

getReserveTokensAddresses

function getReserveTokensAddresses(address asset) external view returns (address aTokenAddress, address stableDebtTokenAddress, address variableDebtTokenAddress)

ILendingPoolAddressesProvider

MarketIdSet

event MarketIdSet(string newMarketId)

LendingPoolUpdated

event LendingPoolUpdated(address newAddress)

ConfigurationAdminUpdated

event ConfigurationAdminUpdated(address newAddress)

EmergencyAdminUpdated

event EmergencyAdminUpdated(address newAddress)

LendingPoolConfiguratorUpdated

event LendingPoolConfiguratorUpdated(address newAddress)

LendingPoolCollateralManagerUpdated

event LendingPoolCollateralManagerUpdated(address newAddress)

PriceOracleUpdated

event PriceOracleUpdated(address newAddress)

LendingRateOracleUpdated

event LendingRateOracleUpdated(address newAddress)

ProxyCreated

event ProxyCreated(bytes32 id, address newAddress)

AddressSet

event AddressSet(bytes32 id, address newAddress, bool hasProxy)

getMarketId

function getMarketId() external view returns (string)

setMarketId

function setMarketId(string marketId) external

setAddress

function setAddress(bytes32 id, address newAddress) external

setAddressAsProxy

function setAddressAsProxy(bytes32 id, address impl) external

getAddress

function getAddress(bytes32 id) external view returns (address)

getLendingPool

function getLendingPool() external view returns (address)

setLendingPoolImpl

function setLendingPoolImpl(address pool) external

getLendingPoolConfigurator

function getLendingPoolConfigurator() external view returns (address)

setLendingPoolConfiguratorImpl

function setLendingPoolConfiguratorImpl(address configurator) external

getLendingPoolCollateralManager

function getLendingPoolCollateralManager() external view returns (address)

setLendingPoolCollateralManager

function setLendingPoolCollateralManager(address manager) external

getPoolAdmin

function getPoolAdmin() external view returns (address)

setPoolAdmin

function setPoolAdmin(address admin) external

getEmergencyAdmin

function getEmergencyAdmin() external view returns (address)

setEmergencyAdmin

function setEmergencyAdmin(address admin) external

getPriceOracle

function getPriceOracle() external view returns (address)

setPriceOracle

function setPriceOracle(address priceOracle) external

getLendingRateOracle

function getLendingRateOracle() external view returns (address)

setLendingRateOracle

function setLendingRateOracle(address lendingRateOracle) external

ILendingPool

Deposit

event Deposit(address reserve, address user, address onBehalfOf, uint256 amount, uint16 referral)

Emitted on deposit()

Name Type Description
reserve address The address of the underlying asset of the reserve
user address The address initiating the deposit
onBehalfOf address The beneficiary of the deposit, receiving the aTokens
amount uint256 The amount deposited
referral uint16 The referral code used

Withdraw

event Withdraw(address reserve, address user, address to, uint256 amount)

Emitted on withdraw()

Name Type Description
reserve address The address of the underlyng asset being withdrawn
user address The address initiating the withdrawal, owner of aTokens
to address Address that will receive the underlying
amount uint256 The amount to be withdrawn

Borrow

event Borrow(address reserve, address user, address onBehalfOf, uint256 amount, uint256 borrowRateMode, uint256 borrowRate, uint16 referral)

Emitted on borrow() and flashLoan() when debt needs to be opened

Name Type Description
reserve address The address of the underlying asset being borrowed
user address The address of the user initiating the borrow(), receiving the funds on borrow() or just initiator of the transaction on flashLoan()
onBehalfOf address The address that will be getting the debt
amount uint256 The amount borrowed out
borrowRateMode uint256 The rate mode: 1 for Stable, 2 for Variable
borrowRate uint256 The numeric rate at which the user has borrowed
referral uint16 The referral code used

Repay

event Repay(address reserve, address user, address repayer, uint256 amount)

Emitted on repay()

Name Type Description
reserve address The address of the underlying asset of the reserve
user address The beneficiary of the repayment, getting his debt reduced
repayer address The address of the user initiating the repay(), providing the funds
amount uint256 The amount repaid

Swap

event Swap(address reserve, address user, uint256 rateMode)

Emitted on swapBorrowRateMode()

Name Type Description
reserve address The address of the underlying asset of the reserve
user address The address of the user swapping his rate mode
rateMode uint256 The rate mode that the user wants to swap to

ReserveUsedAsCollateralEnabled

event ReserveUsedAsCollateralEnabled(address reserve, address user)

Emitted on setUserUseReserveAsCollateral()

Name Type Description
reserve address The address of the underlying asset of the reserve
user address The address of the user enabling the usage as collateral

ReserveUsedAsCollateralDisabled

event ReserveUsedAsCollateralDisabled(address reserve, address user)

Emitted on setUserUseReserveAsCollateral()

Name Type Description
reserve address The address of the underlying asset of the reserve
user address The address of the user enabling the usage as collateral

RebalanceStableBorrowRate

event RebalanceStableBorrowRate(address reserve, address user)

Emitted on rebalanceStableBorrowRate()

Name Type Description
reserve address The address of the underlying asset of the reserve
user address The address of the user for which the rebalance has been executed

FlashLoan

event FlashLoan(address target, address initiator, address asset, uint256 amount, uint256 premium, uint16 referralCode)

Emitted on flashLoan()

Name Type Description
target address The address of the flash loan receiver contract
initiator address The address initiating the flash loan
asset address The address of the asset being flash borrowed
amount uint256 The amount flash borrowed
premium uint256 The fee flash borrowed
referralCode uint16 The referral code used

Paused

event Paused()

Emitted when the pause is triggered.

Unpaused

event Unpaused()

Emitted when the pause is lifted.

LiquidationCall

event LiquidationCall(address collateralAsset, address debtAsset, address user, uint256 debtToCover, uint256 liquidatedCollateralAmount, address liquidator, bool receiveAToken)

Emitted when a borrower is liquidated. This event is emitted by the LendingPool via LendingPoolCollateral manager using a DELEGATECALL This allows to have the events in the generated ABI for LendingPool.

Name Type Description
collateralAsset address The address of the underlying asset used as collateral, to receive as result of the liquidation
debtAsset address The address of the underlying borrowed asset to be repaid with the liquidation
user address The address of the borrower getting liquidated
debtToCover uint256 The debt amount of borrowed asset the liquidator wants to cover
liquidatedCollateralAmount uint256 The amount of collateral received by the liiquidator
liquidator address The address of the liquidator
receiveAToken bool true if the liquidators wants to receive the collateral aTokens, false if he wants to receive the underlying collateral asset directly

ReserveDataUpdated

event ReserveDataUpdated(address reserve, uint256 liquidityRate, uint256 stableBorrowRate, uint256 variableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex)

Emitted when the state of a reserve is updated. NOTE: This event is actually declared in the ReserveLogic library and emitted in the updateInterestRates() function. Since the function is internal, the event will actually be fired by the LendingPool contract. The event is therefore replicated here so it gets added to the LendingPool ABI

Name Type Description
reserve address The address of the underlying asset of the reserve
liquidityRate uint256 The new liquidity rate
stableBorrowRate uint256 The new stable borrow rate
variableBorrowRate uint256 The new variable borrow rate
liquidityIndex uint256 The new liquidity index
variableBorrowIndex uint256 The new variable borrow index

deposit

function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external

Deposits an amount of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User deposits 100 USDC and gets in return 100 aUSDC

Name Type Description
asset address The address of the underlying asset to deposit
amount uint256 The amount to be deposited
onBehalfOf address The address that will receive the aTokens, same as msg.sender if the user wants to receive them on his own wallet, or a different address if the beneficiary of aTokens is a different wallet
referralCode uint16 Code used to register the integrator originating the operation, for potential rewards. 0 if the action is executed directly by the user, without any middle-man

withdraw

function withdraw(address asset, uint256 amount, address to) external returns (uint256)

Withdraws an amount of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC

Name Type Description
asset address The address of the underlying asset to withdraw
amount uint256 The underlying amount to be withdrawn - Send the value type(uint256).max in order to withdraw the whole aToken balance
to address Address that will receive the underlying, same as msg.sender if the user wants to receive it on his own wallet, or a different address if the beneficiary is a different wallet
Name Type Description
[0] uint256 The final amount withdrawn

borrow

function borrow(address asset, uint256 amount, uint256 interestRateMode, uint16 referralCode, address onBehalfOf) external

Allows users to borrow a specific amount of the reserve underlying asset, provided that the borrower already deposited enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as onBehalfOf his own address, receiving the 100 USDC in his wallet and 100 stable/variable debt tokens, depending on the interestRateMode

Name Type Description
asset address The address of the underlying asset to borrow
amount uint256 The amount to be borrowed
interestRateMode uint256 The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable
referralCode uint16 Code used to register the integrator originating the operation, for potential rewards. 0 if the action is executed directly by the user, without any middle-man
onBehalfOf address Address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance

repay

function repay(address asset, uint256 amount, uint256 rateMode, address onBehalfOf) external returns (uint256)

Repays a borrowed amount on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the onBehalfOf address

Name Type Description
asset address The address of the borrowed underlying asset previously borrowed
amount uint256 The amount to repay - Send the value type(uint256).max in order to repay the whole debt for asset on the specific debtMode
rateMode uint256 The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable
onBehalfOf address Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed
Name Type Description
[0] uint256 The final amount repaid

swapBorrowRateMode

function swapBorrowRateMode(address asset, uint256 rateMode) external

Allows a borrower to swap his debt between stable and variable mode, or viceversa

Name Type Description
asset address The address of the underlying asset borrowed
rateMode uint256 The rate mode that the user wants to swap to

rebalanceStableBorrowRate

function rebalanceStableBorrowRate(address asset, address user) external

Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied: 1. Usage ratio is above 95% 2. the current deposit APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too much has been borrowed at a stable rate and depositors are not earning enough

Name Type Description
asset address The address of the underlying asset borrowed
user address The address of the user to be rebalanced

setUserUseReserveAsCollateral

function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external

Allows depositors to enable/disable a specific deposited asset as collateral

Name Type Description
asset address The address of the underlying asset deposited
useAsCollateral bool true if the user wants to use the deposit as collateral, false otherwise

liquidationCall

function liquidationCall(address collateralAsset, address debtAsset, address user, uint256 debtToCover, bool receiveAToken) external

Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers debtToCover amount of debt of the user getting liquidated, and receives a proportionally amount of the collateralAsset plus a bonus to cover market risk

Name Type Description
collateralAsset address The address of the underlying asset used as collateral, to receive as result of the liquidation
debtAsset address The address of the underlying borrowed asset to be repaid with the liquidation
user address The address of the borrower getting liquidated
debtToCover uint256 The debt amount of borrowed asset the liquidator wants to cover
receiveAToken bool true if the liquidators wants to receive the collateral aTokens, false if he wants to receive the underlying collateral asset directly

flashLoan

function flashLoan(address receiverAddress, address[] assets, uint256[] amounts, uint256[] modes, address onBehalfOf, bytes params, uint16 referralCode) external

Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned. IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://developers.aave.com

Name Type Description
receiverAddress address The address of the contract receiving the funds, implementing the IFlashLoanReceiver interface
assets address[] The addresses of the assets being flash-borrowed
amounts uint256[] The amounts amounts being flash-borrowed
modes uint256[] Types of the debt to open if the flash loan is not returned: 0 -> Don't open any debt, just revert if funds can't be transferred from the receiver 1 -> Open debt at stable rate for the value of the amount flash-borrowed to the onBehalfOf address 2 -> Open debt at variable rate for the value of the amount flash-borrowed to the onBehalfOf address
onBehalfOf address The address that will receive the debt in the case of using on modes 1 or 2
params bytes Variadic packed params to pass to the receiver as extra information
referralCode uint16 Code used to register the integrator originating the operation, for potential rewards. 0 if the action is executed directly by the user, without any middle-man

getUserAccountData

function getUserAccountData(address user) external view returns (uint256 totalCollateralETH, uint256 totalDebtETH, uint256 availableBorrowsETH, uint256 currentLiquidationThreshold, uint256 ltv, uint256 healthFactor)

Returns the user account data across all the reserves

Name Type Description
user address The address of the user
Name Type Description
totalCollateralETH uint256 the total collateral in ETH of the user
totalDebtETH uint256 the total debt in ETH of the user
availableBorrowsETH uint256 the borrowing power left of the user
currentLiquidationThreshold uint256 the liquidation threshold of the user
ltv uint256 the loan to value of the user
healthFactor uint256 the current health factor of the user

initReserve

function initReserve(address reserve, address aTokenAddress, address stableDebtAddress, address variableDebtAddress, address interestRateStrategyAddress) external

setReserveInterestRateStrategyAddress

function setReserveInterestRateStrategyAddress(address reserve, address rateStrategyAddress) external

setConfiguration

function setConfiguration(address reserve, uint256 configuration) external

getConfiguration

function getConfiguration(address asset) external view returns (struct DataTypes.ReserveConfigurationMap)

Returns the configuration of the reserve

Name Type Description
asset address The address of the underlying asset of the reserve
Name Type Description
[0] struct DataTypes.ReserveConfigurationMap The configuration of the reserve

getUserConfiguration

function getUserConfiguration(address user) external view returns (struct DataTypes.UserConfigurationMap)

Returns the configuration of the user across all the reserves

Name Type Description
user address The user address
Name Type Description
[0] struct DataTypes.UserConfigurationMap The configuration of the user

getReserveNormalizedIncome

function getReserveNormalizedIncome(address asset) external view returns (uint256)

Returns the normalized income normalized income of the reserve

Name Type Description
asset address The address of the underlying asset of the reserve
Name Type Description
[0] uint256 The reserve's normalized income

getReserveNormalizedVariableDebt

function getReserveNormalizedVariableDebt(address asset) external view returns (uint256)

Returns the normalized variable debt per unit of asset

Name Type Description
asset address The address of the underlying asset of the reserve
Name Type Description
[0] uint256 The reserve normalized variable debt

getReserveData

function getReserveData(address asset) external view returns (struct DataTypes.ReserveData)

Returns the state and configuration of the reserve

Name Type Description
asset address The address of the underlying asset of the reserve
Name Type Description
[0] struct DataTypes.ReserveData The state of the reserve

finalizeTransfer

function finalizeTransfer(address asset, address from, address to, uint256 amount, uint256 balanceFromAfter, uint256 balanceToBefore) external

getReservesList

function getReservesList() external view returns (address[])

getAddressesProvider

function getAddressesProvider() external view returns (contract ILendingPoolAddressesProvider)

setPause

function setPause(bool val) external

paused

function paused() external view returns (bool)

IStableDebtToken

Mint

event Mint(address user, address onBehalfOf, uint256 amount, uint256 currentBalance, uint256 balanceIncrease, uint256 newRate, uint256 avgStableRate, uint256 newTotalSupply)

Emitted when new stable debt is minted

Name Type Description
user address The address of the user who triggered the minting
onBehalfOf address The recipient of stable debt tokens
amount uint256 The amount minted
currentBalance uint256 The current balance of the user
balanceIncrease uint256 The increase in balance since the last action of the user
newRate uint256 The rate of the debt after the minting
avgStableRate uint256 The new average stable rate after the minting
newTotalSupply uint256 The new total supply of the stable debt token after the action

Burn

event Burn(address user, uint256 amount, uint256 currentBalance, uint256 balanceIncrease, uint256 avgStableRate, uint256 newTotalSupply)

Emitted when new stable debt is burned

Name Type Description
user address The address of the user
amount uint256 The amount being burned
currentBalance uint256 The current balance of the user
balanceIncrease uint256 The the increase in balance since the last action of the user
avgStableRate uint256 The new average stable rate after the burning
newTotalSupply uint256 The new total supply of the stable debt token after the action

approveDelegation

function approveDelegation(address delegatee, uint256 amount) external

delegates borrowing power to a user on the specific debt token

Name Type Description
delegatee address the address receiving the delegated borrowing power
amount uint256 the maximum amount being delegated. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)

borrowAllowance

function borrowAllowance(address fromUser, address toUser) external view returns (uint256)

returns the borrow allowance of the user

Name Type Description
fromUser address The user to giving allowance
toUser address The user to give allowance to
Name Type Description
[0] uint256 the current allowance of toUser

mint

function mint(address user, address onBehalfOf, uint256 amount, uint256 rate) external returns (bool)

Mints debt token to the onBehalfOf address. - The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt

Name Type Description
user address The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as onBehalfOf otherwise
onBehalfOf address The address receiving the debt tokens
amount uint256 The amount of debt tokens to mint
rate uint256 The rate of the debt being minted

burn

function burn(address user, uint256 amount) external

Burns debt of user - The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt

Name Type Description
user address The address of the user getting his debt burned
amount uint256 The amount of debt tokens getting burned

getAverageStableRate

function getAverageStableRate() external view returns (uint256)

Returns the average rate of all the stable rate loans.

Name Type Description
[0] uint256 The average stable rate

getUserStableRate

function getUserStableRate(address user) external view returns (uint256)

Returns the stable rate of the user debt

Name Type Description
[0] uint256 The stable rate of the user

getUserLastUpdated

function getUserLastUpdated(address user) external view returns (uint40)

Returns the timestamp of the last update of the user

Name Type Description
[0] uint40 The timestamp

getSupplyData

function getSupplyData() external view returns (uint256, uint256, uint256, uint40)

Returns the principal, the total supply and the average stable rate

getTotalSupplyLastUpdated

function getTotalSupplyLastUpdated() external view returns (uint40)

Returns the timestamp of the last update of the total supply

Name Type Description
[0] uint40 The timestamp

getTotalSupplyAndAvgRate

function getTotalSupplyAndAvgRate() external view returns (uint256, uint256)

Returns the total supply and the average stable rate

principalBalanceOf

function principalBalanceOf(address user) external view returns (uint256)

Returns the principal debt balance of the user

Name Type Description
[0] uint256 The debt balance of the user since the last burn/mint action

IDynamicPricing

DynamicPricingState

enum DynamicPricingState {
  NotStarted,
  Finished,
  InProgress,
  Aborted
}

getPricingType

function getPricingType() external view returns (bytes32)

getPrice

function getPrice(bytes32 did) external view returns (uint256)

getTokenAddress

function getTokenAddress(bytes32 did) external view returns (address)

getStatus

function getStatus(bytes32 did) external view returns (enum IDynamicPricing.DynamicPricingState, uint256, address)

canBePurchased

function canBePurchased(bytes32 did) external view returns (bool)

withdraw

function withdraw(bytes32 did, address withdrawAddress) external returns (bool)

IList

has

function has(bytes32 value) external view returns (bool)

has

function has(bytes32 value, bytes32 id) external view returns (bool)

IRoyaltyScheme

check

function check(bytes32 _did, uint256[] _amounts, address[] _receivers, address _tokenAddress) external view returns (bool)

check that royalties are correct

Name Type Description
_did bytes32 compute royalties for this DID
_amounts uint256[] amounts in payment
_receivers address[] receivers of payments
_tokenAddress address payment token. zero address means native token (ether)

ISecretStore

checkPermissions

function checkPermissions(address user, bytes32 documentKeyId) external view returns (bool permissionGranted)

checkPermissions is called by Parity secret store

ISecretStorePermission

grantPermission

function grantPermission(address user, bytes32 documentKeyId) external

grantPermission is called only by documentKeyId Owner or provider

renouncePermission

function renouncePermission(address user, bytes32 documentKeyId) external

renouncePermission is called only by documentKeyId Owner or provider

IWETHGateway

depositETH

function depositETH(address lendingPool, address onBehalfOf, uint16 referralCode) external payable

withdrawETH

function withdrawETH(address lendingPool, uint256 amount, address to) external

repayETH

function repayETH(address lendingPool, uint256 amount, uint256 rateMode, address onBehalfOf) external payable

borrowETH

function borrowETH(address lendingPool, uint256 amount, uint256 interesRateMode, uint16 referralCode) external

DataTypes

ReserveData

struct ReserveData {
  struct DataTypes.ReserveConfigurationMap configuration;
  uint128 liquidityIndex;
  uint128 variableBorrowIndex;
  uint128 currentLiquidityRate;
  uint128 currentVariableBorrowRate;
  uint128 currentStableBorrowRate;
  uint40 lastUpdateTimestamp;
  address aTokenAddress;
  address stableDebtTokenAddress;
  address variableDebtTokenAddress;
  address interestRateStrategyAddress;
  uint8 id;
}

ReserveConfigurationMap

struct ReserveConfigurationMap {
  uint256 data;
}

UserConfigurationMap

struct UserConfigurationMap {
  uint256 data;
}

InterestRateMode

enum InterestRateMode {
  NONE,
  STABLE,
  VARIABLE
}

SafeMath

add

function add(uint256 a, uint256 b) internal pure returns (uint256)

_Returns the addition of two unsigned integers, reverting on overflow.

Counterpart to Solidity's + operator.

Requirements: - Addition cannot overflow._

sub

function sub(uint256 a, uint256 b) internal pure returns (uint256)

_Returns the subtraction of two unsigned integers, reverting on overflow (when the result is negative).

Counterpart to Solidity's - operator.

Requirements: - Subtraction cannot overflow._

sub

function sub(uint256 a, uint256 b, string errorMessage) internal pure returns (uint256)

_Returns the subtraction of two unsigned integers, reverting with custom message on overflow (when the result is negative).

Counterpart to Solidity's - operator.

Requirements: - Subtraction cannot overflow._

mul

function mul(uint256 a, uint256 b) internal pure returns (uint256)

_Returns the multiplication of two unsigned integers, reverting on overflow.

Counterpart to Solidity's * operator.

Requirements: - Multiplication cannot overflow._

div

function div(uint256 a, uint256 b) internal pure returns (uint256)

_Returns the integer division of two unsigned integers. Reverts on division by zero. The result is rounded towards zero.

Counterpart to Solidity's / operator. Note: this function uses a revert opcode (which leaves remaining gas untouched) while Solidity uses an invalid opcode to revert (consuming all remaining gas).

Requirements: - The divisor cannot be zero._

div

function div(uint256 a, uint256 b, string errorMessage) internal pure returns (uint256)

_Returns the integer division of two unsigned integers. Reverts with custom message on division by zero. The result is rounded towards zero.

Counterpart to Solidity's / operator. Note: this function uses a revert opcode (which leaves remaining gas untouched) while Solidity uses an invalid opcode to revert (consuming all remaining gas).

Requirements: - The divisor cannot be zero._

mod

function mod(uint256 a, uint256 b) internal pure returns (uint256)

_Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), Reverts when dividing by zero.

Counterpart to Solidity's % operator. This function uses a revert opcode (which leaves remaining gas untouched) while Solidity uses an invalid opcode to revert (consuming all remaining gas).

Requirements: - The divisor cannot be zero._

mod

function mod(uint256 a, uint256 b, string errorMessage) internal pure returns (uint256)

_Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), Reverts with custom message when dividing by zero.

Counterpart to Solidity's % operator. This function uses a revert opcode (which leaves remaining gas untouched) while Solidity uses an invalid opcode to revert (consuming all remaining gas).

Requirements: - The divisor cannot be zero._

Address

isContract

function isContract(address account) internal view returns (bool)

_Returns true if account is a contract.

[IMPORTANT]

It is unsafe to assume that an address for which this function returns false is an externally-owned account (EOA) and not a contract.

Among others, isContract will return false for the following types of addresses:

  • an externally-owned account
  • a contract in construction
  • an address where a contract will be created
  • an address where a contract lived, but was destroyed ====_

sendValue

function sendValue(address payable recipient, uint256 amount) internal

_Replacement for Solidity's transfer: sends amount wei to recipient, forwarding all available gas and reverting on errors.

https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost of certain opcodes, possibly making contracts go over the 2300 gas limit imposed by transfer, making them unable to receive funds via transfer. {sendValue} removes this limitation.

https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].

IMPORTANT: because control is transferred to recipient, care must be taken to not create reentrancy vulnerabilities. Consider using {ReentrancyGuard} or the https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]._

SafeERC20

Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a using SafeERC20 for IERC20; statement to your contract, which allows you to call the safe operations as token.safeTransfer(...), etc.

safeTransfer

function safeTransfer(contract IERC20 token, address to, uint256 value) internal

safeTransferFrom

function safeTransferFrom(contract IERC20 token, address from, address to, uint256 value) internal

safeApprove

function safeApprove(contract IERC20 token, address spender, uint256 value) internal

callOptionalReturn

function callOptionalReturn(contract IERC20 token, bytes data) private

CloneFactory

createClone

function createClone(address target) internal returns (address result)

isClone

function isClone(address target, address query) internal view returns (bool result)

EpochLibrary

Implementation of Epoch Library. For an arbitrary Epoch, this library manages the life cycle of an Epoch. Usually this library is used for handling the time window between conditions in an agreement.

Epoch

struct Epoch {
  uint256 timeLock;
  uint256 timeOut;
  uint256 blockNumber;
}

EpochList

struct EpochList {
  mapping(bytes32 => struct EpochLibrary.Epoch) epochs;
  bytes32[] epochIds;
}

create

function create(struct EpochLibrary.EpochList _self, bytes32 _id, uint256 _timeLock, uint256 _timeOut) internal

create creates new Epoch

Name Type Description
_self struct EpochLibrary.EpochList is the Epoch storage pointer
_id bytes32
_timeLock uint256 value in block count (can not fulfill before)
_timeOut uint256 value in block count (can not fulfill after)

isTimedOut

function isTimedOut(struct EpochLibrary.EpochList _self, bytes32 _id) external view returns (bool)

isTimedOut means you cannot fulfill after

Name Type Description
_self struct EpochLibrary.EpochList is the Epoch storage pointer
_id bytes32
Name Type Description
[0] bool true if the current block number is gt timeOut

isTimeLocked

function isTimeLocked(struct EpochLibrary.EpochList _self, bytes32 _id) external view returns (bool)

isTimeLocked means you cannot fulfill before

Name Type Description
_self struct EpochLibrary.EpochList is the Epoch storage pointer
_id bytes32
Name Type Description
[0] bool true if the current block number is gt timeLock

getEpochTimeOut

function getEpochTimeOut(struct EpochLibrary.Epoch _self) public view returns (uint256)

getEpochTimeOut

Name Type Description
_self struct EpochLibrary.Epoch is the Epoch storage pointer

getEpochTimeLock

function getEpochTimeLock(struct EpochLibrary.Epoch _self) public view returns (uint256)

getEpochTimeLock

Name Type Description
_self struct EpochLibrary.Epoch is the Epoch storage pointer

HashListLibrary

Implementation of the basic functionality of list of hash values. This library allows other contracts to build and maintain lists and also preserves the privacy of the data by accepting only hashed content (bytes32 based data type)

List

struct List {
  address _owner;
  bytes32[] values;
  mapping(bytes32 => uint256) indices;
}

onlyListOwner

modifier onlyListOwner(struct HashListLibrary.List _self)

add

function add(struct HashListLibrary.List _self, bytes32 value) public returns (bool)

add index an element then add it to a list

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
value bytes32 is a bytes32 value
Name Type Description
[0] bool true if value is added successfully

add

function add(struct HashListLibrary.List _self, bytes32[] values) public returns (bool)

put an array of elements without indexing this meant to save gas in case of large arrays

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
values bytes32[] is an array of elements value
Name Type Description
[0] bool true if values are added successfully

update

function update(struct HashListLibrary.List _self, bytes32 oldValue, bytes32 newValue) public returns (bool)

update the value with a new value and maintain indices

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
oldValue bytes32 is an element value in a list
newValue bytes32 new value
Name Type Description
[0] bool true if value is updated successfully

remove

function remove(struct HashListLibrary.List _self, bytes32 value) public returns (bool)

remove value from a list, updates indices, and list size

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
value bytes32 is an element value in a list
Name Type Description
[0] bool true if value is removed successfully

get

function get(struct HashListLibrary.List _self, uint256 __index) public view returns (bytes32)

has value by index

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
__index uint256 is where is value is stored in the list
Name Type Description
[0] bytes32 the value if exists

index

function index(struct HashListLibrary.List _self, uint256 from, uint256 to) public returns (bool)

index is used to map each element value to its index on the list

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
from uint256 index is where to 'from' indexing in the list
to uint256 index is where to stop indexing
Name Type Description
[0] bool true if the sub list is indexed

setOwner

function setOwner(struct HashListLibrary.List _self, address _owner) public

setOwner set list owner param _owner owner address

indexOf

function indexOf(struct HashListLibrary.List _self, bytes32 value) public view returns (uint256)

indexOf gets the index of a value in a list

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
value bytes32 is element value in list
Name Type Description
[0] uint256 value index in list

isIndexed

function isIndexed(struct HashListLibrary.List _self) public view returns (bool)

isIndexed checks if the list is indexed

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
Name Type Description
[0] bool true if the list is indexed

all

function all(struct HashListLibrary.List _self) public view returns (bytes32[])

all returns all list elements

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
Name Type Description
[0] bytes32[] all list elements

has

function has(struct HashListLibrary.List _self, bytes32 value) public view returns (bool)

size returns the list size

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
value bytes32 is element value in list
Name Type Description
[0] bool true if the value exists

size

function size(struct HashListLibrary.List _self) public view returns (uint256)

size gets the list size

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
Name Type Description
[0] uint256 total length of the list

ownedBy

function ownedBy(struct HashListLibrary.List _self) public view returns (address)

ownedBy gets the list owner

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
Name Type Description
[0] address list owner

_index

function _index(struct HashListLibrary.List _self, uint256 from, uint256 to) private returns (bool)

__index assign index to the list elements_

Name Type Description
_self struct HashListLibrary.List is a pointer to list in the storage
from uint256 is the starting index id
to uint256 is the ending index id

AbstractAuction

AUCTION_MANAGER_ROLE

bytes32 AUCTION_MANAGER_ROLE

NVM_AGREEMENT_ROLE

bytes32 NVM_AGREEMENT_ROLE

Auction

struct Auction {
  bytes32 did;
  enum IDynamicPricing.DynamicPricingState state;
  address creator;
  uint256 blockNumberCreated;
  uint256 floor;
  uint256 starts;
  uint256 ends;
  uint256 price;
  address tokenAddress;
  address whoCanClaim;
  string hash;
}

auctions

mapping(bytes32 => struct AbstractAuction.Auction) auctions

auctionBids

mapping(bytes32 => mapping(address => uint256)) auctionBids

AuctionCreated

event AuctionCreated(bytes32 auctionId, bytes32 did, address creator, uint256 blockNumberCreated, uint256 floor, uint256 starts, uint256 ends, address tokenAddress)

AuctionChangedState

event AuctionChangedState(bytes32 auctionId, address who, enum IDynamicPricing.DynamicPricingState previousState, enum IDynamicPricing.DynamicPricingState newState)

AuctionBidReceived

event AuctionBidReceived(bytes32 auctionId, address bidder, address tokenAddress, uint256 amount)

AuctionWithdrawal

event AuctionWithdrawal(bytes32 auctionId, address receiver, address tokenAddress, uint256 amount)

receive

receive() external payable

abortAuction

function abortAuction(bytes32 _auctionId) external virtual

withdraw

function withdraw(bytes32 _auctionId, address _withdrawAddress) external virtual returns (bool)

getPricingType

function getPricingType() external pure virtual returns (bytes32)

getPrice

function getPrice(bytes32 _auctionId) external view returns (uint256)

getTokenAddress

function getTokenAddress(bytes32 _auctionId) external view returns (address)

getStatus

function getStatus(bytes32 _auctionId) external view returns (enum IDynamicPricing.DynamicPricingState state, uint256 price, address whoCanClaim)

canBePurchased

function canBePurchased(bytes32 _auctionId) external view virtual returns (bool)

addNVMAgreementRole

function addNVMAgreementRole(address account) public

onlyCreator

modifier onlyCreator(bytes32 _auctionId)

onlyCreatorOrAdmin

modifier onlyCreatorOrAdmin(bytes32 _auctionId)

onlyNotCreator

modifier onlyNotCreator(bytes32 _auctionId)

onlyAfterStart

modifier onlyAfterStart(bytes32 _auctionId)

onlyBeforeStarts

modifier onlyBeforeStarts(bytes32 _auctionId)

onlyBeforeEnd

modifier onlyBeforeEnd(bytes32 _auctionId)

onlyNotAbortedOrFinished

modifier onlyNotAbortedOrFinished(bytes32 _auctionId)

onlyAbortedOrFinished

modifier onlyAbortedOrFinished(bytes32 _auctionId)

onlyNotAborted

modifier onlyNotAborted(bytes32 _auctionId)

onlyFinishedOrAborted

modifier onlyFinishedOrAborted(bytes32 _auctionId)

DutchAuction

initialize

function initialize(address _owner) external

initialize init the contract with the following parameters

Name Type Description
_owner address contract's owner account address

create

function create(bytes32 _auctionId, bytes32 _did, uint256 _startPrice, uint256 _starts, uint256 _ends, address _tokenAddress, string _hash) external virtual

It creates a new Auction given some setup parameters

Name Type Description
_auctionId bytes32 unique auction identifier
_did bytes32 reference to the asset part of the auction
_startPrice uint256 start price (and max) for the auction
_starts uint256 block number when the auction starts
_ends uint256 block number of when the auction ends
_tokenAddress address token address to use for the auction. If address(0) means native token
_hash string ipfs hash referring to the auction metadata

placeNativeTokenBid

function placeNativeTokenBid(bytes32 _auctionId) external payable virtual

placeERC20Bid

function placeERC20Bid(bytes32 _auctionId, uint256 _bidAmount) external virtual

withdraw

function withdraw(bytes32 _auctionId, address _withdrawAddress) external virtual returns (bool)

getPricingType

function getPricingType() external pure returns (bytes32)

EnglishAuction

initialize

function initialize(address _owner) external

initialize init the contract with the following parameters

Name Type Description
_owner address contract's owner account address

create

function create(bytes32 _auctionId, bytes32 _did, uint256 _floor, uint256 _starts, uint256 _ends, address _tokenAddress, string _hash) external virtual

It creates a new Auction given some setup parameters

Name Type Description
_auctionId bytes32 unique auction identifier
_did bytes32 reference to the asset part of the auction
_floor uint256 floor price
_starts uint256 block number when the auction starts
_ends uint256 block number of when the auction ends
_tokenAddress address token address to use for the auction. If address(0) means native token
_hash string ipfs hash referring to the auction metadata

placeNativeTokenBid

function placeNativeTokenBid(bytes32 _auctionId) external payable virtual

placeERC20Bid

function placeERC20Bid(bytes32 _auctionId, uint256 _bidAmount) external virtual

getPricingType

function getPricingType() external pure returns (bytes32)

DIDFactory

Implementation of the DID Registry.

didRegisterList

struct DIDRegistryLibrary.DIDRegisterList didRegisterList

state storage for the DID registry

didPermissions

mapping(bytes32 => mapping(address => bool)) didPermissions

manager

address manager

onlyDIDOwner

modifier onlyDIDOwner(bytes32 _did)

onlyManager

modifier onlyManager()

onlyOwnerProviderOrDelegated

modifier onlyOwnerProviderOrDelegated(bytes32 _did)

onlyValidAttributes

modifier onlyValidAttributes(string _attributes)

nftIsInitialized

modifier nftIsInitialized(bytes32 _did)

nft721IsInitialized

modifier nft721IsInitialized(bytes32 _did)

DIDAttributeRegistered

event DIDAttributeRegistered(bytes32 _did, address _owner, bytes32 _checksum, string _value, address _lastUpdatedBy, uint256 _blockNumberUpdated)

DID Events

DIDProviderRemoved

event DIDProviderRemoved(bytes32 _did, address _provider, bool state)

DIDProviderAdded

event DIDProviderAdded(bytes32 _did, address _provider)

DIDOwnershipTransferred

event DIDOwnershipTransferred(bytes32 _did, address _previousOwner, address _newOwner)

DIDPermissionGranted

event DIDPermissionGranted(bytes32 _did, address _owner, address _grantee)

DIDPermissionRevoked

event DIDPermissionRevoked(bytes32 _did, address _owner, address _grantee)

DIDProvenanceDelegateRemoved

event DIDProvenanceDelegateRemoved(bytes32 _did, address _delegate, bool state)

DIDProvenanceDelegateAdded

event DIDProvenanceDelegateAdded(bytes32 _did, address _delegate)

setManager

function setManager(address _addr) external

Sets the manager role. Should be the TransferCondition contract address

registerAttribute

function registerAttribute(bytes32 _didSeed, bytes32 _checksum, address[] _providers, string _url) public virtual

Register DID attributes.

The first attribute of a DID registered sets the DID owner. Subsequent updates record _checksum and update info.

Name Type Description
_didSeed bytes32 refers to decentralized identifier seed (a bytes32 length ID).
_checksum bytes32 includes a one-way HASH calculated using the DDO content.
_providers address[]
_url string refers to the attribute value, limited to 2048 bytes.

registerDID

function registerDID(bytes32 _didSeed, bytes32 _checksum, address[] _providers, string _url, bytes32 _activityId, string _attributes) public virtual

Register DID attributes.

The first attribute of a DID registered sets the DID owner. Subsequent updates record _checksum and update info.

Name Type Description
_didSeed bytes32 refers to decentralized identifier seed (a bytes32 length ID). The final DID will be calculated with the creator address using the hashDID function
_checksum bytes32 includes a one-way HASH calculated using the DDO content.
_providers address[] list of addresses that can act as an asset provider
_url string refers to the url resolving the DID into a DID Document (DDO), limited to 2048 bytes.
_activityId bytes32 refers to activity
_attributes string refers to the provenance attributes

hashDID

function hashDID(bytes32 _didSeed, address _creator) public pure returns (bytes32)

It generates a DID using as seed a bytes32 and the address of the DID creator

Name Type Description
_didSeed bytes32 refers to DID Seed used as base to generate the final DID
_creator address address of the creator of the DID
Name Type Description
[0] bytes32 the new DID created

areRoyaltiesValid

function areRoyaltiesValid(bytes32 _did, uint256[] _amounts, address[] _receivers, address _tokenAddress) public view returns (bool)

areRoyaltiesValid checks if for a given DID and rewards distribution, this allocate the
original creator royalties properly

Name Type Description
_did bytes32 refers to decentralized identifier (a byte32 length ID)
_amounts uint256[] refers to the amounts to reward
_receivers address[] refers to the receivers of rewards
_tokenAddress address
Name Type Description
[0] bool true if the rewards distribution respect the original creator royalties

wasGeneratedBy

function wasGeneratedBy(bytes32 _provId, bytes32 _did, address _agentId, bytes32 _activityId, string _attributes) internal returns (bool)

used

function used(bytes32 _provId, bytes32 _did, address _agentId, bytes32 _activityId, bytes _signatureUsing, string _attributes) public returns (bool success)

wasDerivedFrom

function wasDerivedFrom(bytes32 _provId, bytes32 _newEntityDid, bytes32 _usedEntityDid, address _agentId, bytes32 _activityId, string _attributes) public returns (bool success)

wasAssociatedWith

function wasAssociatedWith(bytes32 _provId, bytes32 _did, address _agentId, bytes32 _activityId, string _attributes) public returns (bool success)

actedOnBehalf

function actedOnBehalf(bytes32 _provId, bytes32 _did, address _delegateAgentId, address _responsibleAgentId, bytes32 _activityId, bytes _signatureDelegate, string _attributes) public returns (bool success)

Implements the W3C PROV Delegation action Each party involved in this method (_delegateAgentId & _responsibleAgentId) must provide a valid signature. The content to sign is a representation of the footprint of the event (_did + _delegateAgentId + _responsibleAgentId + _activityId)

Name Type Description
_provId bytes32 unique identifier referring to the provenance entry
_did bytes32 refers to decentralized identifier (a bytes32 length ID) of the entity
_delegateAgentId address refers to address acting on behalf of the provenance record
_responsibleAgentId address refers to address responsible of the provenance record
_activityId bytes32 refers to activity
_signatureDelegate bytes refers to the digital signature provided by the did delegate.
_attributes string refers to the provenance attributes
Name Type Description
success bool true if the action was properly registered

addDIDProvider

function addDIDProvider(bytes32 _did, address _provider) external

addDIDProvider add new DID provider.

it adds new DID provider to the providers list. A provider is any entity that can serve the registered asset

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
_provider address provider's address.

removeDIDProvider

function removeDIDProvider(bytes32 _did, address _provider) external

removeDIDProvider delete an existing DID provider.

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
_provider address provider's address.

addDIDProvenanceDelegate

function addDIDProvenanceDelegate(bytes32 _did, address _delegate) public

addDIDProvenanceDelegate add new DID provenance delegate.

it adds new DID provenance delegate to the delegates list. A delegate is any entity that interact with the provenance entries of one DID

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
_delegate address delegates's address.

removeDIDProvenanceDelegate

function removeDIDProvenanceDelegate(bytes32 _did, address _delegate) external

removeDIDProvenanceDelegate delete an existing DID delegate.

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
_delegate address delegate's address.

transferDIDOwnership

function transferDIDOwnership(bytes32 _did, address _newOwner) external

transferDIDOwnership transfer DID ownership

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID)
_newOwner address new owner address

transferDIDOwnershipManaged

function transferDIDOwnershipManaged(address _sender, bytes32 _did, address _newOwner) external

transferDIDOwnershipManaged transfer DID ownership

Name Type Description
_sender address
_did bytes32 refers to decentralized identifier (a bytes32 length ID)
_newOwner address new owner address

_transferDIDOwnership

function _transferDIDOwnership(address _sender, bytes32 _did, address _newOwner) internal

grantPermission

function grantPermission(bytes32 _did, address _grantee) external

grantPermission grants access permission to grantee

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID)
_grantee address address

revokePermission

function revokePermission(bytes32 _did, address _grantee) external

revokePermission revokes access permission from grantee

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID)
_grantee address address

getPermission

function getPermission(bytes32 _did, address _grantee) external view returns (bool)

getPermission gets access permission of a grantee

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID)
_grantee address address
Name Type Description
[0] bool true if grantee has access permission to a DID

isDIDProvider

function isDIDProvider(bytes32 _did, address _provider) public view returns (bool)

isDIDProvider check whether a given DID provider exists

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
_provider address provider's address.

isDIDProviderOrOwner

function isDIDProviderOrOwner(bytes32 _did, address _provider) public view returns (bool)

getDIDRegister

function getDIDRegister(bytes32 _did) public view returns (address owner, bytes32 lastChecksum, string url, address lastUpdatedBy, uint256 blockNumberUpdated, address[] providers, uint256 nftSupply, uint256 mintCap, uint256 royalties)
Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
Name Type Description
owner address the did owner
lastChecksum bytes32 last checksum
url string URL to the DID metadata
lastUpdatedBy address who was the last updating the DID
blockNumberUpdated uint256 In which block was the DID updated
providers address[] the list of providers
nftSupply uint256 the supply of nfts
mintCap uint256 the maximum number of nfts that can be minted
royalties uint256 the royalties amount

getDIDSupply

function getDIDSupply(bytes32 _did) public view returns (uint256 nftSupply, uint256 mintCap)

getBlockNumberUpdated

function getBlockNumberUpdated(bytes32 _did) public view returns (uint256 blockNumberUpdated)
Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
Name Type Description
blockNumberUpdated uint256 last modified (update) block number of a DID.

getDIDOwner

function getDIDOwner(bytes32 _did) public view returns (address didOwner)
Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
Name Type Description
didOwner address the address of the DID owner.

getDIDRoyaltyRecipient

function getDIDRoyaltyRecipient(bytes32 _did) public view returns (address)

getDIDRoyaltyScheme

function getDIDRoyaltyScheme(bytes32 _did) public view returns (address)

getDIDCreator

function getDIDCreator(bytes32 _did) public view returns (address)

_grantPermission

function _grantPermission(bytes32 _did, address _grantee) internal

__grantPermission grants access permission to grantee_

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID)
_grantee address address

_revokePermission

function _revokePermission(bytes32 _did, address _grantee) internal

__revokePermission revokes access permission from grantee_

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID)
_grantee address address

_getPermission

function _getPermission(bytes32 _did, address _grantee) internal view returns (bool)

__getPermission gets access permission of a grantee_

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID)
_grantee address address
Name Type Description
[0] bool true if grantee has access permission to a DID

getProvenanceEntry

function getProvenanceEntry(bytes32 _provId) public view returns (bytes32 did, bytes32 relatedDid, address agentId, bytes32 activityId, address agentInvolvedId, uint8 method, address createdBy, uint256 blockNumberUpdated, bytes signature)

Fetch the complete provenance entry attributes

Name Type Description
_provId bytes32 refers to the provenance identifier
Name Type Description
did bytes32 to what DID refers this entry
relatedDid bytes32 DID related with the entry
agentId address the agent identifier
activityId bytes32 referring to the id of the activity
agentInvolvedId address agent involved with the action
method uint8 the w3c provenance method
createdBy address who is creating this entry
blockNumberUpdated uint256 in which block was updated
signature bytes digital signature

isDIDOwner

function isDIDOwner(address _address, bytes32 _did) public view returns (bool)

isDIDOwner check whether a given address is owner for a DID

Name Type Description
_address address user address.
_did bytes32 refers to decentralized identifier (a bytes32 length ID).

isOwnerProviderOrDelegate

function isOwnerProviderOrDelegate(bytes32 _did) public view returns (bool)

isOwnerProviderOrDelegate check whether msg.sender is owner, provider or delegate for a DID given

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
Name Type Description
[0] bool boolean true if yes

isProvenanceDelegate

function isProvenanceDelegate(bytes32 _did, address _delegate) public view returns (bool)

isProvenanceDelegate check whether a given DID delegate exists

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
_delegate address delegate's address.
Name Type Description
[0] bool boolean true if yes

getProvenanceOwner

function getProvenanceOwner(bytes32 _did) public view returns (address provenanceOwner)
Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
Name Type Description
provenanceOwner address the address of the Provenance owner.

DIDRegistry

Implementation of a Mintable DID Registry.

erc1155

contract NFTUpgradeable erc1155

erc721

contract NFT721Upgradeable erc721

royaltiesCheckers

mapping(address => bool) royaltiesCheckers

initialize

function initialize(address _owner, address _erc1155, address _erc721) public

DIDRegistry Initializer Initialize Ownable. Only on contract creation.

Name Type Description
_owner address refers to the owner of the contract.
_erc1155 address
_erc721 address

registerRoyaltiesChecker

function registerRoyaltiesChecker(address _addr) public

DIDRoyaltiesAdded

event DIDRoyaltiesAdded(bytes32 did, address addr)

DIDRoyaltyRecipientChanged

event DIDRoyaltyRecipientChanged(bytes32 did, address addr)

setDIDRoyalties

function setDIDRoyalties(bytes32 _did, address _royalties) public

setDIDRoyaltyRecipient

function setDIDRoyaltyRecipient(bytes32 _did, address _recipient) public

registerMintableDID

function registerMintableDID(bytes32 _didSeed, bytes32 _checksum, address[] _providers, string _url, uint256 _cap, uint8 _royalties, bool _mint, bytes32 _activityId, string _nftMetadata) public

Register a Mintable DID using NFTs based in the ERC-1155 standard.

The first attribute of a DID registered sets the DID owner. Subsequent updates record _checksum and update info.

Name Type Description
_didSeed bytes32 refers to decentralized identifier seed (a bytes32 length ID).
_checksum bytes32 includes a one-way HASH calculated using the DDO content.
_providers address[] list of addresses that can act as an asset provider
_url string refers to the url resolving the DID into a DID Document (DDO), limited to 2048 bytes.
_cap uint256 refers to the mint cap
_royalties uint8 refers to the royalties to reward to the DID creator in the secondary market
_mint bool if true it mints the ERC-1155 NFTs attached to the asset
_activityId bytes32 refers to activity
_nftMetadata string refers to the url providing the NFT Metadata

registerMintableDID721

function registerMintableDID721(bytes32 _didSeed, bytes32 _checksum, address[] _providers, string _url, uint8 _royalties, bool _mint, bytes32 _activityId, string _nftMetadata) public

Register a Mintable DID using NFTs based in the ERC-721 standard.

The first attribute of a DID registered sets the DID owner. Subsequent updates record _checksum and update info.

Name Type Description
_didSeed bytes32 refers to decentralized identifier seed (a bytes32 length ID).
_checksum bytes32 includes a one-way HASH calculated using the DDO content.
_providers address[] list of addresses that can act as an asset provider
_url string refers to the url resolving the DID into a DID Document (DDO), limited to 2048 bytes.
_royalties uint8 refers to the royalties to reward to the DID creator in the secondary market
_mint bool if true it mints the ERC-1155 NFTs attached to the asset
_activityId bytes32 refers to activity
_nftMetadata string refers to the url providing the NFT Metadata

registerMintableDID

function registerMintableDID(bytes32 _didSeed, bytes32 _checksum, address[] _providers, string _url, uint256 _cap, uint8 _royalties, bytes32 _activityId, string _nftMetadata) public

Register a Mintable DID.

The first attribute of a DID registered sets the DID owner. Subsequent updates record _checksum and update info.

Name Type Description
_didSeed bytes32 refers to decentralized identifier seed (a bytes32 length ID).
_checksum bytes32 includes a one-way HASH calculated using the DDO content.
_providers address[] list of addresses that can act as an asset provider
_url string refers to the url resolving the DID into a DID Document (DDO), limited to 2048 bytes.
_cap uint256 refers to the mint cap
_royalties uint8 refers to the royalties to reward to the DID creator in the secondary market
_activityId bytes32 refers to activity
_nftMetadata string refers to the url providing the NFT Metadata

enableAndMintDidNft

function enableAndMintDidNft(bytes32 _did, uint256 _cap, uint8 _royalties, bool _mint, string _nftMetadata) public returns (bool success)

enableDidNft creates the initial setup of NFTs minting and royalties distribution for ERC-1155 NFTs. After this initial setup, this data can't be changed anymore for the DID given, even for the owner of the DID. The reason of this is to avoid minting additional NFTs after the initial agreement, what could affect the valuation of NFTs of a DID already created.

update the DID registry providers list by adding the mintCap and royalties configuration

Name Type Description
_did bytes32 refers to decentralized identifier (a byte32 length ID)
_cap uint256 refers to the mint cap
_royalties uint8 refers to the royalties to reward to the DID creator in the secondary market
_mint bool if is true mint directly the amount capped tokens and lock in the _lockAddress
_nftMetadata string refers to the url providing the NFT Metadata

enableAndMintDidNft721

function enableAndMintDidNft721(bytes32 _did, uint8 _royalties, bool _mint, string _nftMetadata) public returns (bool success)

enableAndMintDidNft721 creates the initial setup of NFTs minting and royalties distribution for ERC-721 NFTs. After this initial setup, this data can't be changed anymore for the DID given, even for the owner of the DID. The reason of this is to avoid minting additional NFTs after the initial agreement, what could affect the valuation of NFTs of a DID already created.

update the DID registry providers list by adding the mintCap and royalties configuration

Name Type Description
_did bytes32 refers to decentralized identifier (a byte32 length ID)
_royalties uint8 refers to the royalties to reward to the DID creator in the secondary market
_mint bool if is true mint directly the amount capped tokens and lock in the _lockAddress
_nftMetadata string refers to the url providing the NFT Metadata

mint

function mint(bytes32 _did, uint256 _amount, address _receiver) public

Mints a NFT associated to the DID

Because ERC-1155 uses uint256 and DID's are bytes32, there is a conversion between both Only the DID owner can mint NFTs associated to the DID

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
_amount uint256 amount to mint
_receiver address the address that will receive the new nfts minted

mint

function mint(bytes32 _did, uint256 _amount) public

mint721

function mint721(bytes32 _did, address _receiver) public

Mints a ERC-721 NFT associated to the DID

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
_receiver address the address that will receive the new nfts minted

mint721

function mint721(bytes32 _did) public

burn

function burn(bytes32 _did, uint256 _amount) public

Burns NFTs associated to the DID

Because ERC-1155 uses uint256 and DID's are bytes32, there is a conversion between both Only the DID owner can burn NFTs associated to the DID

Name Type Description
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
_amount uint256 amount to burn

burn721

function burn721(bytes32 _did) public

DIDRegistryLibrary

All function calls are currently implemented without side effects

DIDRegister

struct DIDRegister {
  address owner;
  uint8 royalties;
  bool nftInitialized;
  bool nft721Initialized;
  address creator;
  bytes32 lastChecksum;
  string url;
  address lastUpdatedBy;
  uint256 blockNumberUpdated;
  address[] providers;
  address[] delegates;
  uint256 nftSupply;
  uint256 mintCap;
  address royaltyRecipient;
  contract IRoyaltyScheme royaltyScheme;
}

DIDRegisterList

struct DIDRegisterList {
  mapping(bytes32 => struct DIDRegistryLibrary.DIDRegister) didRegisters;
  bytes32[] didRegisterIds;
}

update

function update(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, bytes32 _checksum, string _url) external

update the DID store

access modifiers and storage pointer should be implemented in DIDRegistry

Name Type Description
_self struct DIDRegistryLibrary.DIDRegisterList refers to storage pointer
_did bytes32 refers to decentralized identifier (a byte32 length ID)
_checksum bytes32 includes a one-way HASH calculated using the DDO content
_url string includes the url resolving to the DID Document (DDO)

initializeNftConfig

function initializeNftConfig(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, uint256 _cap, uint8 _royalties) internal

initializeNftConfig creates the initial setup of NFTs minting and royalties distribution. After this initial setup, this data can't be changed anymore for the DID given, even for the owner of the DID. The reason of this is to avoid minting additional NFTs after the initial agreement, what could affect the valuation of NFTs of a DID already created.

update the DID registry providers list by adding the mintCap and royalties configuration

Name Type Description
_self struct DIDRegistryLibrary.DIDRegisterList refers to storage pointer
_did bytes32 refers to decentralized identifier (a byte32 length ID)
_cap uint256 refers to the mint cap
_royalties uint8 refers to the royalties to reward to the DID creator in the secondary market The royalties in secondary market for the creator should be between 0% >= x < 100%

initializeNft721Config

function initializeNft721Config(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, uint8 _royalties) internal

areRoyaltiesValid

function areRoyaltiesValid(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, uint256[] _amounts, address[] _receivers, address _tokenAddress) internal view returns (bool)

areRoyaltiesValid checks if for a given DID and rewards distribution, this allocate the
original creator royalties properly

Name Type Description
_self struct DIDRegistryLibrary.DIDRegisterList refers to storage pointer
_did bytes32 refers to decentralized identifier (a byte32 length ID)
_amounts uint256[] refers to the amounts to reward
_receivers address[] refers to the receivers of rewards
_tokenAddress address
Name Type Description
[0] bool true if the rewards distribution respect the original creator royalties

addProvider

function addProvider(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, address provider) internal

addProvider add provider to DID registry

update the DID registry providers list by adding a new provider

Name Type Description
_self struct DIDRegistryLibrary.DIDRegisterList refers to storage pointer
_did bytes32 refers to decentralized identifier (a byte32 length ID)
provider address the provider's address

removeProvider

function removeProvider(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, address _provider) internal returns (bool)

removeProvider remove provider from DID registry

update the DID registry providers list by removing an existing provider

Name Type Description
_self struct DIDRegistryLibrary.DIDRegisterList refers to storage pointer
_did bytes32 refers to decentralized identifier (a byte32 length ID)
_provider address the provider's address

updateDIDOwner

function updateDIDOwner(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, address _newOwner) internal

updateDIDOwner transfer DID ownership to a new owner

Name Type Description
_self struct DIDRegistryLibrary.DIDRegisterList refers to storage pointer
_did bytes32 refers to decentralized identifier (a byte32 length ID)
_newOwner address the new DID owner address

isProvider

function isProvider(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, address _provider) public view returns (bool)

isProvider check whether DID provider exists

Name Type Description
_self struct DIDRegistryLibrary.DIDRegisterList refers to storage pointer
_did bytes32 refers to decentralized identifier (a byte32 length ID)
_provider address the provider's address
Name Type Description
[0] bool true if the provider already exists

getProviderIndex

function getProviderIndex(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, address provider) private view returns (int256)

getProviderIndex get the index of a provider

Name Type Description
_self struct DIDRegistryLibrary.DIDRegisterList refers to storage pointer
_did bytes32 refers to decentralized identifier (a byte32 length ID)
provider address the provider's address
Name Type Description
[0] int256 the index if the provider exists otherwise return -1

addDelegate

function addDelegate(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, address delegate) internal

addDelegate add delegate to DID registry

update the DID registry delegates list by adding a new delegate

Name Type Description
_self struct DIDRegistryLibrary.DIDRegisterList refers to storage pointer
_did bytes32 refers to decentralized identifier (a byte32 length ID)
delegate address the delegate's address

removeDelegate

function removeDelegate(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, address _delegate) internal returns (bool)

removeDelegate remove delegate from DID registry

update the DID registry delegates list by removing an existing delegate

Name Type Description
_self struct DIDRegistryLibrary.DIDRegisterList refers to storage pointer
_did bytes32 refers to decentralized identifier (a byte32 length ID)
_delegate address the delegate's address

isDelegate

function isDelegate(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, address _delegate) public view returns (bool)

isDelegate check whether DID delegate exists

Name Type Description
_self struct DIDRegistryLibrary.DIDRegisterList refers to storage pointer
_did bytes32 refers to decentralized identifier (a byte32 length ID)
_delegate address the delegate's address
Name Type Description
[0] bool true if the delegate already exists

getDelegateIndex

function getDelegateIndex(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, address delegate) private view returns (int256)

getDelegateIndex get the index of a delegate

Name Type Description
_self struct DIDRegistryLibrary.DIDRegisterList refers to storage pointer
_did bytes32 refers to decentralized identifier (a byte32 length ID)
delegate address the delegate's address
Name Type Description
[0] int256 the index if the delegate exists otherwise return -1

ProvenanceRegistry

All function calls are currently implemented without side effects

__ProvenanceRegistry_init

function __ProvenanceRegistry_init() internal

__ProvenanceRegistry_init_unchained

function __ProvenanceRegistry_init_unchained() internal

Provenance

struct Provenance {
  bytes32 did;
  bytes32 relatedDid;
  address agentId;
  bytes32 activityId;
  address agentInvolvedId;
  uint8 method;
  address createdBy;
  uint256 blockNumberUpdated;
  bytes signature;
}

ProvenanceRegistryList

struct ProvenanceRegistryList {
  mapping(bytes32 &#x3D;&gt; struct ProvenanceRegistry.Provenance) list;
}

provenanceRegistry

struct ProvenanceRegistry.ProvenanceRegistryList provenanceRegistry

ProvenanceMethod

enum ProvenanceMethod {
  ENTITY,
  ACTIVITY,
  WAS_GENERATED_BY,
  USED,
  WAS_INFORMED_BY,
  WAS_STARTED_BY,
  WAS_ENDED_BY,
  WAS_INVALIDATED_BY,
  WAS_DERIVED_FROM,
  AGENT,
  WAS_ATTRIBUTED_TO,
  WAS_ASSOCIATED_WITH,
  ACTED_ON_BEHALF
}

ProvenanceAttributeRegistered

event ProvenanceAttributeRegistered(bytes32 provId, bytes32 _did, address _agentId, bytes32 _activityId, bytes32 _relatedDid, address _agentInvolvedId, enum ProvenanceRegistry.ProvenanceMethod _method, string _attributes, uint256 _blockNumberUpdated)

Provenance Events

WasGeneratedBy

event WasGeneratedBy(bytes32 _did, address _agentId, bytes32 _activityId, bytes32 provId, string _attributes, uint256 _blockNumberUpdated)

Used

event Used(bytes32 _did, address _agentId, bytes32 _activityId, bytes32 provId, string _attributes, uint256 _blockNumberUpdated)

WasDerivedFrom

event WasDerivedFrom(bytes32 _newEntityDid, bytes32 _usedEntityDid, address _agentId, bytes32 _activityId, bytes32 provId, string _attributes, uint256 _blockNumberUpdated)

WasAssociatedWith

event WasAssociatedWith(bytes32 _entityDid, address _agentId, bytes32 _activityId, bytes32 provId, string _attributes, uint256 _blockNumberUpdated)

ActedOnBehalf

event ActedOnBehalf(bytes32 _entityDid, address _delegateAgentId, address _responsibleAgentId, bytes32 _activityId, bytes32 provId, string _attributes, uint256 _blockNumberUpdated)

createProvenanceEntry

function createProvenanceEntry(bytes32 _provId, bytes32 _did, bytes32 _relatedDid, address _agentId, bytes32 _activityId, address _agentInvolvedId, enum ProvenanceRegistry.ProvenanceMethod _method, address _createdBy, bytes _signatureDelegate, string _attributes) internal returns (bool)

create an event in the Provenance store

access modifiers and storage pointer should be implemented in ProvenanceRegistry

Name Type Description
_provId bytes32 refers to provenance event identifier
_did bytes32 refers to decentralized identifier (a byte32 length ID)
_relatedDid bytes32 refers to decentralized identifier (a byte32 length ID) of a related entity
_agentId address refers to address of the agent creating the provenance record
_activityId bytes32 refers to activity
_agentInvolvedId address refers to address of the agent involved with the provenance record
_method enum ProvenanceRegistry.ProvenanceMethod refers to the W3C Provenance method
_createdBy address refers to address of the agent triggering the activity
_signatureDelegate bytes refers to the digital signature provided by the did delegate.
_attributes string

_wasGeneratedBy

function _wasGeneratedBy(bytes32 _provId, bytes32 _did, address _agentId, bytes32 _activityId, string _attributes) internal virtual returns (bool)

Implements the W3C PROV Generation action

Name Type Description
_provId bytes32 unique identifier referring to the provenance entry
_did bytes32 refers to decentralized identifier (a bytes32 length ID) of the entity created
_agentId address refers to address of the agent creating the provenance record
_activityId bytes32 refers to activity
_attributes string refers to the provenance attributes
Name Type Description
[0] bool the number of the new provenance size

_used

function _used(bytes32 _provId, bytes32 _did, address _agentId, bytes32 _activityId, bytes _signatureUsing, string _attributes) internal virtual returns (bool success)

Implements the W3C PROV Usage action

Name Type Description
_provId bytes32 unique identifier referring to the provenance entry
_did bytes32 refers to decentralized identifier (a bytes32 length ID) of the entity created
_agentId address refers to address of the agent creating the provenance record
_activityId bytes32 refers to activity
_signatureUsing bytes refers to the digital signature provided by the agent using the _did
_attributes string refers to the provenance attributes
Name Type Description
success bool true if the action was properly registered

_wasDerivedFrom

function _wasDerivedFrom(bytes32 _provId, bytes32 _newEntityDid, bytes32 _usedEntityDid, address _agentId, bytes32 _activityId, string _attributes) internal virtual returns (bool success)

Implements the W3C PROV Derivation action

Name Type Description
_provId bytes32 unique identifier referring to the provenance entry
_newEntityDid bytes32 refers to decentralized identifier (a bytes32 length ID) of the entity created
_usedEntityDid bytes32 refers to decentralized identifier (a bytes32 length ID) of the entity used to derive the new did
_agentId address refers to address of the agent creating the provenance record
_activityId bytes32 refers to activity
_attributes string refers to the provenance attributes
Name Type Description
success bool true if the action was properly registered

_wasAssociatedWith

function _wasAssociatedWith(bytes32 _provId, bytes32 _did, address _agentId, bytes32 _activityId, string _attributes) internal virtual returns (bool success)

Implements the W3C PROV Association action

Name Type Description
_provId bytes32 unique identifier referring to the provenance entry
_did bytes32 refers to decentralized identifier (a bytes32 length ID) of the entity
_agentId address refers to address of the agent creating the provenance record
_activityId bytes32 refers to activity
_attributes string refers to the provenance attributes
Name Type Description
success bool true if the action was properly registered

_actedOnBehalf

function _actedOnBehalf(bytes32 _provId, bytes32 _did, address _delegateAgentId, address _responsibleAgentId, bytes32 _activityId, bytes _signatureDelegate, string _attributes) internal virtual returns (bool success)

Implements the W3C PROV Delegation action Each party involved in this method (_delegateAgentId & _responsibleAgentId) must provide a valid signature. The content to sign is a representation of the footprint of the event (_did + _delegateAgentId + _responsibleAgentId + _activityId)

Name Type Description
_provId bytes32 unique identifier referring to the provenance entry
_did bytes32 refers to decentralized identifier (a bytes32 length ID) of the entity
_delegateAgentId address refers to address acting on behalf of the provenance record
_responsibleAgentId address refers to address responsible of the provenance record
_activityId bytes32 refers to activity
_signatureDelegate bytes refers to the digital signature provided by the did delegate.
_attributes string refers to the provenance attributes
Name Type Description
success bool true if the action was properly registered

CurveRoyalties

registry

contract DIDRegistry registry

DENOMINATOR

uint256 DENOMINATOR

royalties

mapping(bytes32 => uint256) royalties

initialize

function initialize(address _registry) public

royaltyCurve

function royaltyCurve(uint256 num, uint256 max, uint256 rate) public pure virtual returns (uint256)

setRoyalty

function setRoyalty(bytes32 _did, uint256 _royalty) public

Set royalties for a DID

Can only be called by creator of the DID

Name Type Description
_did bytes32 DID for which the royalties are set
_royalty uint256 Royalty, the actual royalty will be _royalty / 10000 percent

check

function check(bytes32 _did, uint256[] _amounts, address[] _receivers, address _token) external view returns (bool)

RewardsDistributor

used

mapping(bytes32 => bool) used

receivers

mapping(bytes32 => address[]) receivers

registry

contract DIDRegistry registry

conditionStoreManager

contract ConditionStoreManager conditionStoreManager

escrow

address escrow

initialize

function initialize(address _registry, address _conditionStoreManager, address _escrow) public

setReceivers

function setReceivers(bytes32 _did, address[] _addr) public

set receivers for did

Name Type Description
_did bytes32 DID
_addr address[] list of receivers

claimReward

function claimReward(bytes32 _agreementId, bytes32 _did, uint256[] _amounts, address[] _receivers, address _returnAddress, address _lockPaymentAddress, address _tokenAddress, bytes32 _lockCondition, bytes32[] _releaseConditions) public

distribute rewards associated with an escrow condition

as paramemeters, it just gets the same parameters as fulfill for escrow condition

Name Type Description
_agreementId bytes32 agreement identifier
_did bytes32 asset decentralized identifier
_amounts uint256[] token amounts to be locked/released
_receivers address[] receiver's address
_returnAddress address
_lockPaymentAddress address lock payment contract address
_tokenAddress address the ERC20 contract address to use during the payment
_lockCondition bytes32 lock condition identifier
_releaseConditions bytes32[] release condition identifier

StandardRoyalties

registry

contract DIDRegistry registry

DENOMINATOR

uint256 DENOMINATOR

royalties

mapping(bytes32 => uint256) royalties

initialize

function initialize(address _registry) public

setRoyalty

function setRoyalty(bytes32 _did, uint256 _royalty) public

Set royalties for a DID

Can only be called by creator of the DID

Name Type Description
_did bytes32 DID for which the royalties are set
_royalty uint256 Royalty, the actual royalty will be _royalty / 10000 percent

check

function check(bytes32 _did, uint256[] _amounts, address[] _receivers, address) external view returns (bool)

AaveCreditTemplate

Implementation of the Aaven Credit Agreement Template 0. Initialize the agreement 1. LockNFT - Delegatee locks the NFT 2. AaveCollateralDeposit - Delegator deposits the collateral into Aave. And approves the delegation flow 3. AaveBorrowCondition - The Delegatee claim the credit amount from Aave 4. AaveRepayCondition. Options: 4.a Fulfilled state - The Delegatee pay back the loan (including fee) into Aave and gets back the NFT 4.b Aborted state - The Delegatee doesn't pay the loan in time so the Delegator gets the NFT. The Delegator pays the loan to Aave 5. TransferNFT. Options: 5.a if AaveRepayCondition was fulfilled, it will allow transfer back to the Delegatee or Borrower 5.b if AaveRepayCondition was aborted, it will allow transfer the NFT to the Delegator or Lender

didRegistry

contract DIDRegistry didRegistry

nftLockCondition

contract INFTLock nftLockCondition

depositCondition

contract AaveCollateralDepositCondition depositCondition

borrowCondition

contract AaveBorrowCondition borrowCondition

repayCondition

contract AaveRepayCondition repayCondition

transferCondition

contract DistributeNFTCollateralCondition transferCondition

withdrawCondition

contract AaveCollateralWithdrawCondition withdrawCondition

vaultAddress

mapping(bytes32 => address) vaultAddress

nvmFee

uint256 nvmFee

vaultLibrary

address vaultLibrary

VaultCreated

event VaultCreated(address _vaultAddress, address _creator, address _lender, address _borrower)

initialize

function initialize(address _owner, address _agreementStoreManagerAddress, address _nftLockConditionAddress, address _depositConditionAddress, address _borrowConditionAddress, address _repayConditionAddress, address _withdrawCollateralAddress, address _transferConditionAddress, address _vaultLibrary) external

initialize init the contract with the following parameters.

this function is called only once during the contract initialization. It initializes the ownable feature, and set push the required condition types including access , lock payment and escrow payment conditions.

Name Type Description
_owner address contract's owner account address
_agreementStoreManagerAddress address agreement store manager contract address
_nftLockConditionAddress address NFT Lock Condition contract address
_depositConditionAddress address Aave collateral deposit Condition address
_borrowConditionAddress address Aave borrow deposit Condition address
_repayConditionAddress address Aave repay credit Condition address
_withdrawCollateralAddress address
_transferConditionAddress address NFT Transfer Condition address
_vaultLibrary address

createVaultAgreement

function createVaultAgreement(bytes32 _id, bytes32 _did, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts, address _vaultAddress) public

createAgreement

function createAgreement(bytes32 _id, address _lendingPool, address _dataProvider, address _weth, uint256 _agreementFee, address _treasuryAddress, bytes32 _did, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts, address _lender) public

deployVault

function deployVault(address _lendingPool, address _dataProvider, address _weth, uint256 _agreementFee, address _treasuryAddress, address _borrower, address _lender) public returns (address)

getVaultForAgreement

function getVaultForAgreement(bytes32 _agreementId) public view returns (address)

updateNVMFee

function updateNVMFee(uint256 _newFee) public

Updates the nevermined fee for this type of agreement

Name Type Description
_newFee uint256 New nevermined fee expressed in basis points

changeCreditVaultLibrary

function changeCreditVaultLibrary(address _vaultLibrary) public

AccessProofTemplate

Implementation of Access Agreement Template

didRegistry

contract DIDRegistry didRegistry

accessCondition

contract AccessProofCondition accessCondition

lockCondition

contract LockPaymentCondition lockCondition

escrowReward

contract EscrowPaymentCondition escrowReward

initialize

function initialize(address _owner, address _agreementStoreManagerAddress, address _didRegistryAddress, address _accessConditionAddress, address _lockConditionAddress, address payable _escrowConditionAddress) external

initialize init the contract with the following parameters.

this function is called only once during the contract initialization. It initializes the ownable feature, and set push the required condition types including access , lock payment and escrow payment conditions.

Name Type Description
_owner address contract's owner account address
_agreementStoreManagerAddress address agreement store manager contract address
_didRegistryAddress address DID registry contract address
_accessConditionAddress address access condition address
_lockConditionAddress address lock reward condition contract address
_escrowConditionAddress address payable escrow reward contract address

AccessTemplate

_Implementation of Access Agreement Template

 Access template is use case specific template.
 Anyone (consumer/provider/publisher) can use this template in order
 to setup an on-chain SEA. The template is a composite of three basic
 conditions. Once the agreement is created, the consumer will lock an amount
 of tokens (as listed in the DID document - off-chain metadata) to the 
 the lock reward contract which in turn will fire an event. ON the other hand 
 the provider is listening to all the emitted events, the provider 
 will catch the event and grant permissions to the consumer through 
 secret store contract, the consumer now is able to download the data set
 by asking the off-chain component of secret store to decrypt the DID and 
 encrypt it using the consumer's public key. Then the secret store will 
 provide an on-chain proof that the consumer had access to the data set.
 Finally, the provider can call the escrow reward condition in order 
 to release the payment. Every condition has a time window (time lock and 
 time out). This implies that if the provider didn't grant the access to 
 the consumer through secret store within this time window, the consumer 
 can ask for refund._

didRegistry

contract DIDRegistry didRegistry

accessCondition

contract AccessCondition accessCondition

lockCondition

contract LockPaymentCondition lockCondition

escrowReward

contract EscrowPaymentCondition escrowReward

initialize

function initialize(address _owner, address _agreementStoreManagerAddress, address _didRegistryAddress, address _accessConditionAddress, address _lockConditionAddress, address payable _escrowConditionAddress) external

initialize init the contract with the following parameters.

this function is called only once during the contract initialization. It initializes the ownable feature, and set push the required condition types including access , lock payment and escrow payment conditions.

Name Type Description
_owner address contract's owner account address
_agreementStoreManagerAddress address agreement store manager contract address
_didRegistryAddress address DID registry contract address
_accessConditionAddress address access condition address
_lockConditionAddress address lock reward condition contract address
_escrowConditionAddress address payable escrow reward contract address

AgreementTemplate

_Implementation of Agreement Template

 Agreement template is a reference template where it
 has the ability to create agreements from whitelisted 
 template_

conditionTypes

address[] conditionTypes

agreementStoreManager

contract AgreementStoreManager agreementStoreManager

createAgreement

function createAgreement(bytes32 _id, bytes32 _did, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts) public

createAgreement create new agreement

Name Type Description
_id bytes32 agreement unique identifier
_did bytes32 refers to decentralized identifier (a bytes32 length ID).
_conditionIds bytes32[] list of condition identifiers
_timeLocks uint256[] list of time locks, each time lock will be assigned to the same condition that has the same index
_timeOuts uint256[] list of time outs, each time out will be assigned to the same condition that has the same index

createAgreementAndPay

function createAgreementAndPay(bytes32 _id, bytes32 _did, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts, uint256 _idx, address payable _rewardAddress, address _tokenAddress, uint256[] _amounts, address[] _receivers) public payable

createAgreementAndFulfill

function createAgreementAndFulfill(bytes32 _id, bytes32 _did, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts, uint256[] _indices, address[] _accounts, bytes[] _params) internal

getConditionTypes

function getConditionTypes() public view returns (address[])

getConditionTypes gets the conditions addresses list

for the current template returns list of condition contracts addresses

Name Type Description
[0] address[] list of conditions contract addresses

BaseEscrowTemplate

agreementData

struct BaseEscrowTemplate.AgreementData agreementData

AgreementCreated

event AgreementCreated(bytes32 _agreementId, bytes32 _did, address _accessConsumer, address _accessProvider, uint256[] _timeLocks, uint256[] _timeOuts, bytes32[] _conditionIdSeeds, bytes32[] _conditionIds, bytes32 _idSeed, address _creator)

AgreementDataModel

struct AgreementDataModel {
  address accessConsumer;
  address accessProvider;
  bytes32 did;
}

AgreementData

struct AgreementData {
  mapping(bytes32 &#x3D;&gt; struct BaseEscrowTemplate.AgreementDataModel) agreementDataItems;
  bytes32[] agreementIds;
}

createAgreement

function createAgreement(bytes32 _id, bytes32 _did, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts, address _accessConsumer) public

createAgreement creates agreements through agreement template

this function initializes the agreement by setting the DID, conditions ID, timeouts, time locks and the consumer address. The DID provider/owner is automatically detected by the DID Registry

Name Type Description
_id bytes32 SEA agreement unique identifier
_did bytes32 Decentralized Identifier (DID)
_conditionIds bytes32[] conditions ID associated with the condition types
_timeLocks uint256[] the starting point of the time window ,time lock is in block number not seconds
_timeOuts uint256[] the ending point of the time window ,time lock is in block number not seconds
_accessConsumer address consumer address

createAgreementAndPayEscrow

function createAgreementAndPayEscrow(bytes32 _id, bytes32 _did, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts, address _accessConsumer, uint256 _idx, address payable _rewardAddress, address _tokenAddress, uint256[] _amounts, address[] _receivers) public payable

createAgreementAndFulfill

function createAgreementAndFulfill(bytes32 _id, bytes32 _did, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts, address _accessConsumer, uint256[] _indices, address[] _accounts, bytes[] _params) internal

_makeIds

function _makeIds(bytes32 _idSeed, bytes32[] _conditionIds) internal view returns (bytes32[])

_initAgreement

function _initAgreement(bytes32 _idSeed, bytes32 _did, uint256[] _timeLocks, uint256[] _timeOuts, address _accessConsumer, bytes32[] _conditionIds) internal

getAgreementData

function getAgreementData(bytes32 _id) external view returns (address accessConsumer, address accessProvider)

getAgreementData return the agreement Data

Name Type Description
_id bytes32 SEA agreement unique identifier
Name Type Description
accessConsumer address the agreement consumer
accessProvider address the provider addresses

DIDSalesTemplate

_Implementation of DID Sales Template

 The DID Sales template supports an scenario where an Asset owner
 can sell that asset to a new Owner.
 Anyone (consumer/provider/publisher) can use this template in order
 to setup an agreement allowing an Asset owner to get transfer the asset ownership
 after some payment. 
 The template is a composite of 3 basic conditions: 
 - Lock Payment Condition
 - Transfer DID Condition
 - Escrow Reward Condition

 This scenario takes into account royalties for original creators in the secondary market.
 Once the agreement is created, the consumer after payment can request the ownership transfer of an asset
 from the current owner for a specific DID._

didRegistry

contract DIDRegistry didRegistry

lockPaymentCondition

contract LockPaymentCondition lockPaymentCondition

transferCondition

contract TransferDIDOwnershipCondition transferCondition

rewardCondition

contract EscrowPaymentCondition rewardCondition

id

function id() public pure returns (uint256)

initialize

function initialize(address _owner, address _agreementStoreManagerAddress, address _lockConditionAddress, address _transferConditionAddress, address payable _escrowPaymentAddress) external

initialize init the contract with the following parameters.

this function is called only once during the contract initialization. It initializes the ownable feature, and set push the required condition types including access secret store, lock reward and escrow reward conditions.

Name Type Description
_owner address contract's owner account address
_agreementStoreManagerAddress address agreement store manager contract address
_lockConditionAddress address lock reward condition contract address
_transferConditionAddress address transfer ownership condition contract address
_escrowPaymentAddress address payable escrow reward condition contract address

DynamicAccessTemplate

Implementation of Agreement Template This is a dynamic template that allows to setup flexible conditions depending on the use case.

didRegistry

contract DIDRegistry didRegistry

templateConfig

struct DynamicAccessTemplate.TemplateConditions templateConfig

TemplateConditions

struct TemplateConditions {
  mapping(address &#x3D;&gt; contract Condition) templateConditions;
}

initialize

function initialize(address _owner, address _agreementStoreManagerAddress, address _didRegistryAddress) external

initialize init the contract with the following parameters.

this function is called only once during the contract initialization. It initializes the ownable feature, and set push the required condition types including access secret store, lock reward and escrow reward conditions.

Name Type Description
_owner address contract's owner account address
_agreementStoreManagerAddress address agreement store manager contract address
_didRegistryAddress address DID registry contract address

addTemplateCondition

function addTemplateCondition(address _conditionAddress) external returns (uint256 length)

addTemplateCondition adds a new condition to the template

Name Type Description
_conditionAddress address condition contract address
Name Type Description
length uint256 conditionTypes array size

removeLastTemplateCondition

function removeLastTemplateCondition() external returns (address[])

removeLastTemplateCondition removes last condition added to the template

Name Type Description
[0] address[] conditionTypes existing in the array

EscrowComputeExecutionTemplate

_Implementation of a Compute Execution Agreement Template

 EscrowComputeExecutionTemplate is use case specific template.
 Anyone (consumer/provider/publisher) can use this template in order
 to setup an on-chain SEA. The template is a composite of three basic
 conditions. Once the agreement is created, the consumer will lock an amount
 of tokens (as listed in the DID document - off-chain metadata) to the 
 the lock reward contract which in turn will fire an event. ON the other hand 
 the provider is listening to all the emitted events, the provider 
 will catch the event and grant permissions to trigger a computation granting
 the execution via the ComputeExecutionCondition contract. 
 The consumer now is able to trigger that computation
 by asking the off-chain gateway to start the execution of a compute workflow.
 Finally, the provider can call the escrow reward condition in order 
 to release the payment. Every condition has a time window (time lock and 
 time out). This implies that if the provider didn't grant the execution to 
 the consumer within this time window, the consumer 
 can ask for refund._

didRegistry

contract DIDRegistry didRegistry

computeExecutionCondition

contract ComputeExecutionCondition computeExecutionCondition

lockPaymentCondition

contract LockPaymentCondition lockPaymentCondition

escrowPayment

contract EscrowPaymentCondition escrowPayment

initialize

function initialize(address _owner, address _agreementStoreManagerAddress, address _didRegistryAddress, address _computeExecutionConditionAddress, address _lockPaymentConditionAddress, address payable _escrowPaymentAddress) external

initialize init the contract with the following parameters.

this function is called only once during the contract initialization. It initializes the ownable feature, and set push the required condition types including service executor condition, lock reward and escrow reward conditions.

Name Type Description
_owner address contract's owner account address
_agreementStoreManagerAddress address agreement store manager contract address
_didRegistryAddress address DID registry contract address
_computeExecutionConditionAddress address service executor condition contract address
_lockPaymentConditionAddress address lock reward condition contract address
_escrowPaymentAddress address payable escrow reward contract address

name

function name() public pure returns (string)

NFT721AccessProofTemplate

Implementation of NFT721 Access Proof Template

NFT721AccessSwapTemplate

NFT721AccessTemplate

Implementation of NFT Access Template

NFT721SalesTemplate

Implementation of NFT Sales Template

NFT721SalesWithAccessTemplate

NFTAccessProofTemplate

_Implementation of NFT Access Template

 The NFT Access template is use case specific template.
 Anyone (consumer/provider/publisher) can use this template in order
 to setup an agreement allowing NFT holders to get access to Nevermined services. 
 The template is a composite of 2 basic conditions: 
 - NFT Holding Condition
 - Access Condition

 Once the agreement is created, the consumer can demonstrate is holding a NFT
 for a specific DID. If that's the case the Access condition can be fulfilled
 by the asset owner or provider and all the agreement is fulfilled.
 This can be used in scenarios where a data or services owner, can allow 
 users to get access to exclusive services only when they demonstrate the 
 are holding a specific number of NFTs of a DID.
 This is very useful in use cases like arts._

didRegistry

contract DIDRegistry didRegistry

nftHolderCondition

contract INFTHolder nftHolderCondition

accessCondition

contract AccessProofCondition accessCondition

initialize

function initialize(address _owner, address _agreementStoreManagerAddress, address _nftHolderConditionAddress, address _accessConditionAddress) external

initialize init the contract with the following parameters.

this function is called only once during the contract initialization. It initializes the ownable feature, and set push the required condition types including access secret store, lock reward and escrow reward conditions.

Name Type Description
_owner address contract's owner account address
_agreementStoreManagerAddress address agreement store manager contract address
_nftHolderConditionAddress address lock reward condition contract address
_accessConditionAddress address access condition contract address

NFTAccessSwapTemplate

_Implementation of NFT Sales Template

 The NFT Sales template supports an scenario where a NFT owner
 can sell that asset to a new Owner.
 Anyone (consumer/provider/publisher) can use this template in order
 to setup an agreement allowing a NFT owner to transfer the asset ownership
 after some payment. 
 The template is a composite of 3 basic conditions: 
 - Lock Payment Condition
 - Transfer NFT Condition
 - Escrow Reward Condition

 This scenario takes into account royalties for original creators in the secondary market.
 Once the agreement is created, the consumer after payment can request the transfer of the NFT
 from the current owner for a specific DID._

didRegistry

contract DIDRegistry didRegistry

lockPaymentCondition

contract INFTLock lockPaymentCondition

rewardCondition

contract INFTEscrow rewardCondition

accessCondition

contract AccessProofCondition accessCondition

id

function id() public pure returns (uint256)

initialize

function initialize(address _owner, address _agreementStoreManagerAddress, address _lockPaymentConditionAddress, address payable _escrowPaymentAddress, address _accessCondition) external

initialize init the contract with the following parameters.

this function is called only once during the contract initialization. It initializes the ownable feature, and set push the required condition types including access secret store, lock reward and escrow reward conditions.

Name Type Description
_owner address contract's owner account address
_agreementStoreManagerAddress address agreement store manager contract address
_lockPaymentConditionAddress address lock reward condition contract address
_escrowPaymentAddress address payable escrow reward condition contract address
_accessCondition address

NFTAccessTemplate

_Implementation of NFT Access Template

 The NFT Access template is use case specific template.
 Anyone (consumer/provider/publisher) can use this template in order
 to setup an agreement allowing NFT holders to get access to Nevermined services. 
 The template is a composite of 2 basic conditions: 
 - NFT Holding Condition
 - Access Condition

 Once the agreement is created, the consumer can demonstrate is holding a NFT
 for a specific DID. If that's the case the Access condition can be fulfilled
 by the asset owner or provider and all the agreement is fulfilled.
 This can be used in scenarios where a data or services owner, can allow 
 users to get access to exclusive services only when they demonstrate the 
 are holding a specific number of NFTs of a DID.
 This is very useful in use cases like arts._

didRegistry

contract DIDRegistry didRegistry

nftHolderCondition

contract INFTHolder nftHolderCondition

accessCondition

contract INFTAccess accessCondition

initialize

function initialize(address _owner, address _agreementStoreManagerAddress, address _nftHolderConditionAddress, address _accessConditionAddress) external

initialize init the contract with the following parameters.

this function is called only once during the contract initialization. It initializes the ownable feature, and set push the required condition types including access secret store, lock reward and escrow reward conditions.

Name Type Description
_owner address contract's owner account address
_agreementStoreManagerAddress address agreement store manager contract address
_nftHolderConditionAddress address lock reward condition contract address
_accessConditionAddress address access condition contract address

NFTSalesTemplate

_Implementation of NFT Sales Template

 The NFT Sales template supports an scenario where a NFT owner
 can sell that asset to a new Owner.
 Anyone (consumer/provider/publisher) can use this template in order
 to setup an agreement allowing a NFT owner to transfer the asset ownership
 after some payment. 
 The template is a composite of 3 basic conditions: 
 - Lock Payment Condition
 - Transfer NFT Condition
 - Escrow Reward Condition

 This scenario takes into account royalties for original creators in the secondary market.
 Once the agreement is created, the consumer after payment can request the transfer of the NFT
 from the current owner for a specific DID._

didRegistry

contract DIDRegistry didRegistry

lockPaymentCondition

contract LockPaymentCondition lockPaymentCondition

transferCondition

contract ITransferNFT transferCondition

rewardCondition

contract EscrowPaymentCondition rewardCondition

id

function id() public pure returns (uint256)

initialize

function initialize(address _owner, address _agreementStoreManagerAddress, address _lockPaymentConditionAddress, address _transferConditionAddress, address payable _escrowPaymentAddress) external

initialize init the contract with the following parameters.

this function is called only once during the contract initialization. It initializes the ownable feature, and set push the required condition types including access secret store, lock reward and escrow reward conditions.

Name Type Description
_owner address contract's owner account address
_agreementStoreManagerAddress address agreement store manager contract address
_lockPaymentConditionAddress address lock reward condition contract address
_transferConditionAddress address transfer NFT condition contract address
_escrowPaymentAddress address payable escrow reward condition contract address

nftPrice

mapping(address => mapping(address => mapping(address => mapping(bytes32 => uint256)))) nftPrice

nftSale

function nftSale(address nftAddress, bytes32 nftId, address token, uint256 amount) external

checkParamsTransfer

function checkParamsTransfer(bytes[] _params, bytes32 lockPaymentConditionId, bytes32 _did) internal view returns (address)

checkParamsEscrow

function checkParamsEscrow(bytes[] _params, bytes32 lockPaymentId, bytes32 transferId) internal pure

createAgreementFulfill

function createAgreementFulfill(bytes32 _id, bytes32 _did, uint256[] _timeLocks, uint256[] _timeOuts, address _accessConsumer, bytes[] _params) external payable

NFTSalesWithAccessTemplate

_Implementation of NFT Sales Template

 The NFT Sales template supports an scenario where a NFT owner
 can sell that asset to a new Owner.
 Anyone (consumer/provider/publisher) can use this template in order
 to setup an agreement allowing a NFT owner to transfer the asset ownership
 after some payment. 
 The template is a composite of 3 basic conditions: 
 - Lock Payment Condition
 - Transfer NFT Condition
 - Escrow Reward Condition

 This scenario takes into account royalties for original creators in the secondary market.
 Once the agreement is created, the consumer after payment can request the transfer of the NFT
 from the current owner for a specific DID._

didRegistry

contract DIDRegistry didRegistry

lockPaymentCondition

contract LockPaymentCondition lockPaymentCondition

transferCondition

contract ITransferNFT transferCondition

rewardCondition

contract EscrowPaymentCondition rewardCondition

accessCondition

contract AccessProofCondition accessCondition

initialize

function initialize(address _owner, address _agreementStoreManagerAddress, address _lockPaymentConditionAddress, address _transferConditionAddress, address payable _escrowPaymentAddress, address _accessCondition) external

initialize init the contract with the following parameters.

this function is called only once during the contract initialization. It initializes the ownable feature, and set push the required condition types including access secret store, lock reward and escrow reward conditions.

Name Type Description
_owner address contract's owner account address
_agreementStoreManagerAddress address agreement store manager contract address
_lockPaymentConditionAddress address lock reward condition contract address
_transferConditionAddress address transfer NFT condition contract address
_escrowPaymentAddress address payable escrow reward condition contract address
_accessCondition address

TemplateStoreLibrary

_Implementation of the Template Store Library.

 Templates are blueprints for modular SEAs. When 
 creating an Agreement, a templateId defines the condition 
 and reward types that are instantiated in the ConditionStore._

TemplateState

enum TemplateState {
  Uninitialized,
  Proposed,
  Approved,
  Revoked
}

Template

struct Template {
  enum TemplateStoreLibrary.TemplateState state;
  address owner;
  address lastUpdatedBy;
  uint256 blockNumberUpdated;
}

TemplateList

struct TemplateList {
  mapping(address &#x3D;&gt; struct TemplateStoreLibrary.Template) templates;
  address[] templateIds;
}

propose

function propose(struct TemplateStoreLibrary.TemplateList _self, address _id) internal returns (uint256 size)

propose new template

Name Type Description
_self struct TemplateStoreLibrary.TemplateList is the TemplateList storage pointer
_id address proposed template contract address
Name Type Description
size uint256 which is the index of the proposed template

approve

function approve(struct TemplateStoreLibrary.TemplateList _self, address _id) internal

approve new template

Name Type Description
_self struct TemplateStoreLibrary.TemplateList is the TemplateList storage pointer
_id address proposed template contract address

revoke

function revoke(struct TemplateStoreLibrary.TemplateList _self, address _id) internal

revoke new template

Name Type Description
_self struct TemplateStoreLibrary.TemplateList is the TemplateList storage pointer
_id address approved template contract address

TemplateStoreManager

Implementation of the Template Store Manager. Templates are blueprints for modular SEAs. When creating an Agreement, a templateId defines the condition and reward types that are instantiated in the ConditionStore. This contract manages the life cycle of the template ( Propose → Approve → Revoke ).

templateList

struct TemplateStoreLibrary.TemplateList templateList

onlyOwnerOrTemplateOwner

modifier onlyOwnerOrTemplateOwner(address _id)

initialize

function initialize(address _owner) public

initialize TemplateStoreManager Initializer Initializes Ownable. Only on contract creation.

Name Type Description
_owner address refers to the owner of the contract

proposeTemplate

function proposeTemplate(address _id) external returns (uint256 size)

proposeTemplate proposes a new template

Name Type Description
_id address unique template identifier which is basically the template contract address

approveTemplate

function approveTemplate(address _id) external

approveTemplate approves a template

Name Type Description
_id address unique template identifier which is basically the template contract address. Only template store manager owner (i.e OPNF) can approve this template.

revokeTemplate

function revokeTemplate(address _id) external

revokeTemplate revoke a template

Name Type Description
_id address unique template identifier which is basically the template contract address. Only template store manager owner (i.e OPNF) or template owner can revoke this template.

getTemplate

function getTemplate(address _id) external view returns (enum TemplateStoreLibrary.TemplateState state, address owner, address lastUpdatedBy, uint256 blockNumberUpdated)

getTemplate get more information about a template

Name Type Description
_id address unique template identifier which is basically the template contract address.
Name Type Description
state enum TemplateStoreLibrary.TemplateState template status
owner address template owner
lastUpdatedBy address last updated by
blockNumberUpdated uint256 last updated at.

getTemplateListSize

function getTemplateListSize() external view virtual returns (uint256 size)

getTemplateListSize number of templates

Name Type Description
size uint256 number of templates

isTemplateApproved

function isTemplateApproved(address _id) external view returns (bool)

isTemplateApproved check whether the template is approved

Name Type Description
_id address unique template identifier which is basically the template contract address.
Name Type Description
[0] bool true if the template is approved

AgreementStoreManagerChangeFunctionSignature

createAgreement

function createAgreement(bytes32 _id, bytes32 _did, address[] _conditionTypes, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts, address _creator, address _sender) public

AgreementStoreManagerChangeInStorage

agreementCount

uint256 agreementCount

AgreementStoreManagerChangeInStorageAndLogic

AgreementStoreManagerExtraFunctionality

dummyFunction

function dummyFunction() public pure returns (bool)

AgreementStoreManagerWithBug

getDIDRegistryAddress

function getDIDRegistryAddress() public pure returns (address)

getDIDRegistryAddress utility function used by other contracts or any EOA.

Name Type Description
[0] address the DIDRegistry address

ConditionStoreChangeFunctionSignature

createCondition

function createCondition(bytes32 _id, address _typeRef, address _sender) public

ConditionStoreChangeInStorage

conditionCount

uint256 conditionCount

ConditionStoreChangeInStorageAndLogic

ConditionStoreExtraFunctionality

dummyFunction

function dummyFunction() public pure returns (bool)

ConditionStoreWithBug

getConditionState

function getConditionState(bytes32 _id) public view returns (enum ConditionStoreLibrary.ConditionState)

getConditionState

Name Type Description
[0] enum ConditionStoreLibrary.ConditionState condition state

DIDRegistryChangeFunctionSignature

registerAttribute

function registerAttribute(bytes32 _didSeed, address[] _providers, bytes32 _checksum, string _url) public

DIDRegistryChangeInStorage

timeOfRegister

mapping(bytes32 => uint256) timeOfRegister

DIDRegistryChangeInStorageAndLogic

DIDRegistryExtraFunctionality

getNumber

function getNumber() public pure returns (uint256)

DIDRegistryWithBug

registerAttribute

function registerAttribute(bytes32 _checksum, bytes32 _didSeed, address[] _providers, string _url) public

registerAttribute is called only by DID owner.

this function registers DID attributes

Name Type Description
_checksum bytes32 includes a one-way HASH calculated using the DDO content
_didSeed bytes32 refers to decentralized identifier (a byte32 length ID)
_providers address[]
_url string refers to the attribute value

IPNFT

TokenURIChanged

event TokenURIChanged(uint256 tokenId, string newURI)

initialize

function initialize(string _name, string _symbol) public

setTokenURI

function setTokenURI(uint256 tokenId, string _tokenURI) public

mint

function mint(address to, uint256 _tokenId, string _tokenURI) public returns (bool)

mintWithoutTokenURI

function mintWithoutTokenURI(address to, uint256 _tokenId) external

transfer

function transfer(address from, address to, uint256 _tokenId) public

NeverminedConfigChangeInStorage

newVariable

uint256 newVariable

NeverminedConfigChangeFunctionSignature

setMarketplaceFees

function setMarketplaceFees(uint256 _marketplaceFee, address _feeReceiver, uint256 _newParameter) external virtual

NeverminedConfigChangeInStorageAndLogic

NeverminedConfigWithBug

setMarketplaceFees

function setMarketplaceFees(uint256 _marketplaceFee, address _feeReceiver) external virtual

The governor can update the Nevermined Marketplace fees

Name Type Description
_marketplaceFee uint256 new marketplace fee
_feeReceiver address The address receiving the fee

TemplateStoreChangeFunctionSignature

proposeTemplate

function proposeTemplate(address _id, address _sender) external returns (uint256 size)

TemplateStoreChangeInStorage

templateCount

uint256 templateCount

TemplateStoreChangeInStorageAndLogic

TemplateStoreExtraFunctionality

dummyFunction

function dummyFunction() public pure returns (bool)

TemplateStoreWithBug

getTemplateListSize

function getTemplateListSize() external view returns (uint256 size)

getTemplateListSize number of templates

Name Type Description
size uint256 number of templates

TestERC721

initialize

function initialize() public

mint

function mint(uint256 id) public

DIDRegistryLibraryProxy

didRegister

struct DIDRegistryLibrary.DIDRegister didRegister

didRegisterList

struct DIDRegistryLibrary.DIDRegisterList didRegisterList

areRoyaltiesValid

function areRoyaltiesValid(bytes32 _did, uint256[] _amounts, address[] _receivers, address _tokenAddress) public view returns (bool)

updateDIDOwner

function updateDIDOwner(bytes32 _did, address _newOwner) public

update

function update(bytes32 _did, bytes32 _checksum, string _url) public

initializeNftConfig

function initializeNftConfig(bytes32 _did, uint256 _cap, uint8 _royalties) public

initializeNft721Config

function initializeNft721Config(bytes32 _did, uint8 _royalties) public

getDIDInfo

function getDIDInfo(bytes32 _did) public view returns (address owner, address creator, uint256 royalties)

EpochLibraryProxy

epoch

struct EpochLibrary.Epoch epoch

epochList

struct EpochLibrary.EpochList epochList

create

function create(bytes32 _id, uint256 _timeLock, uint256 _timeOut) external

HashListLibraryProxy

testData

struct HashListLibrary.List testData

initialize

function initialize(address _owner) public

hash

function hash(address _address) public pure returns (bytes32)

add

function add(bytes32[] values) external returns (bool)

add

function add(bytes32 value) external returns (bool)

update

function update(bytes32 oldValue, bytes32 newValue) external returns (bool)

index

function index(uint256 from, uint256 to) external returns (bool)

has

function has(bytes32 value) external view returns (bool)

remove

function remove(bytes32 value) external returns (bool)

get

function get(uint256 _index) external view returns (bytes32)

size

function size() external view returns (uint256)

all

function all() external view returns (bytes32[])

indexOf

function indexOf(bytes32 value) external view returns (uint256)

ownedBy

function ownedBy() external view returns (address)

isIndexed

function isIndexed() external view returns (bool)

NFTBase

Implementation of the Royalties EIP-2981 base contract See https://eips.ethereum.org/EIPS/eip-2981

_proxyApprovals

mapping(address => bool) _proxyApprovals

MINTER_ROLE

bytes32 MINTER_ROLE

RoyaltyInfo

struct RoyaltyInfo {
  address receiver;
  uint256 royaltyAmount;
}

NFTMetadata

struct NFTMetadata {
  string nftURI;
}

_royalties

mapping(uint256 => struct NFTBase.RoyaltyInfo) _royalties

_metadata

mapping(uint256 => struct NFTBase.NFTMetadata) _metadata

_expiration

mapping(address => uint256) _expiration

ProxyApproval

event ProxyApproval(address sender, address operator, bool approved)

Event for recording proxy approvals.

setProxyApproval

function setProxyApproval(address operator, bool approved) public virtual

_setNFTMetadata

function _setNFTMetadata(uint256 tokenId, string tokenURI) internal

_setTokenRoyalty

function _setTokenRoyalty(uint256 tokenId, address receiver, uint256 royaltyAmount) internal

royaltyInfo

function royaltyInfo(uint256 tokenId, uint256 value) external view returns (address receiver, uint256 royaltyAmount)

@inheritdoc IERC2981Upgradeable

NFTUpgradeable

Implementation of the basic standard multi-token. See https://eips.ethereum.org/EIPS/eip-1155

initialize

function initialize(string uri_) public

See {_setURI}.

isApprovedForAll

function isApprovedForAll(address account, address operator) public view virtual returns (bool)

See {IERC1155-isApprovedForAll}.

mint

function mint(address to, uint256 id, uint256 amount, bytes data) public

burn

function burn(address to, uint256 id, uint256 amount) public

addMinter

function addMinter(address account) public

uri

function uri(uint256 tokenId) public view returns (string)

setNFTMetadata

function setNFTMetadata(uint256 tokenId, string nftURI) public

Record some NFT Metadata

Name Type Description
tokenId uint256 the id of the asset with the royalties associated
nftURI string the URI (https, ipfs, etc) to the metadata describing the NFT

setTokenRoyalty

function setTokenRoyalty(uint256 tokenId, address receiver, uint256 royaltyAmount) public

Record the asset royalties

Name Type Description
tokenId uint256 the id of the asset with the royalties associated
receiver address the receiver of the royalties (the original creator)
royaltyAmount uint256 percentage (no decimals, between 0 and 100)

supportsInterface

function supportsInterface(bytes4 interfaceId) public view virtual returns (bool)

NFT721SubscriptionUpgradeable

mint

function mint(address to, uint256 id, uint256 expirationBlock) public

_This mint function allows to define when the NFT expires. The minter should calculate this block number depending on the network velocity

TransferNFT721Condition needs to have the MINTER_ROLE_

balanceOf

function balanceOf(address owner) public view returns (uint256)

See {IERC721-balanceOf}.

NFT721Upgradeable

Implementation of the basic standard multi-token.

initialize

function initialize(string name, string symbol) public virtual

initialize

function initialize() public virtual

isApprovedForAll

function isApprovedForAll(address account, address operator) public view virtual returns (bool)

See {IERC1155-isApprovedForAll}.

addMinter

function addMinter(address account) public

mint

function mint(address to, uint256 id) public virtual

burn

function burn(uint256 id) public

tokenURI

function tokenURI(uint256 tokenId) public view virtual returns (string)

See {IERC721Metadata-tokenURI}.

setNFTMetadata

function setNFTMetadata(uint256 tokenId, string nftURI) public

Record some NFT Metadata

Name Type Description
tokenId uint256 the id of the asset with the royalties associated
nftURI string the URI (https, ipfs, etc) to the metadata describing the NFT

setTokenRoyalty

function setTokenRoyalty(uint256 tokenId, address receiver, uint256 royaltyAmount) public

Record the asset royalties

Name Type Description
tokenId uint256 the id of the asset with the royalties associated
receiver address the receiver of the royalties (the original creator)
royaltyAmount uint256 percentage (no decimals, between 0 and 100)

supportsInterface

function supportsInterface(bytes4 interfaceId) public view virtual returns (bool)

POAPUpgradeable

_tokenIdCounter

struct CountersUpgradeable.Counter _tokenIdCounter

_tokenEvent

mapping(uint256 => uint256) _tokenEvent

initialize

function initialize() public

initialize

function initialize(string name, string symbol) public virtual

mint

function mint(address to, string uri, uint256 eventId) public

mint

function mint(address to, uint256 id) public

tokenEvent

function tokenEvent(uint256 tokenId) public view returns (uint256)

_beforeTokenTransfer

function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal

_burn

function _burn(uint256 tokenId) internal

tokenDetailsOfOwner

function tokenDetailsOfOwner(address owner) public view returns (uint256[] tokenIds, uint256[] eventIds)

tokenURI

function tokenURI(uint256 tokenId) public view returns (string)

isApprovedForAll

function isApprovedForAll(address account, address operator) public view returns (bool)

supportsInterface

function supportsInterface(bytes4 interfaceId) public view virtual returns (bool)

PlonkVerifier

n

uint32 n

nPublic

uint16 nPublic

nLagrange

uint16 nLagrange

Qmx

uint256 Qmx

Qmy

uint256 Qmy

Qlx

uint256 Qlx

Qly

uint256 Qly

Qrx

uint256 Qrx

Qry

uint256 Qry

Qox

uint256 Qox

Qoy

uint256 Qoy

Qcx

uint256 Qcx

Qcy

uint256 Qcy

S1x

uint256 S1x

S1y

uint256 S1y

S2x

uint256 S2x

S2y

uint256 S2y

S3x

uint256 S3x

S3y

uint256 S3y

k1

uint256 k1

k2

uint256 k2

X2x1

uint256 X2x1

X2x2

uint256 X2x2

X2y1

uint256 X2y1

X2y2

uint256 X2y2

q

uint256 q

qf

uint256 qf

w1

uint256 w1

G1x

uint256 G1x

G1y

uint256 G1y

G2x1

uint256 G2x1

G2x2

uint256 G2x2

G2y1

uint256 G2y1

G2y2

uint256 G2y2

pA

uint16 pA

pB

uint16 pB

pC

uint16 pC

pZ

uint16 pZ

pT1

uint16 pT1

pT2

uint16 pT2

pT3

uint16 pT3

pWxi

uint16 pWxi

pWxiw

uint16 pWxiw

pEval_a

uint16 pEval_a

pEval_b

uint16 pEval_b

pEval_c

uint16 pEval_c

pEval_s1

uint16 pEval_s1

pEval_s2

uint16 pEval_s2

pEval_zw

uint16 pEval_zw

pEval_r

uint16 pEval_r

pAlpha

uint16 pAlpha

pBeta

uint16 pBeta

pGamma

uint16 pGamma

pXi

uint16 pXi

pXin

uint16 pXin

pBetaXi

uint16 pBetaXi

pV1

uint16 pV1

pV2

uint16 pV2

pV3

uint16 pV3

pV4

uint16 pV4

pV5

uint16 pV5

pV6

uint16 pV6

pU

uint16 pU

pPl

uint16 pPl

pEval_t

uint16 pEval_t

pA1

uint16 pA1

pB1

uint16 pB1

pZh

uint16 pZh

pZhInv

uint16 pZhInv

pEval_l1

uint16 pEval_l1

pEval_l2

uint16 pEval_l2

pEval_l3

uint16 pEval_l3

pEval_l4

uint16 pEval_l4

pEval_l5

uint16 pEval_l5

pEval_l6

uint16 pEval_l6

pEval_l7

uint16 pEval_l7

lastMem

uint16 lastMem

verifyProof

function verifyProof(bytes proof, uint256[] pubSignals) public view returns (bool)