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 theinterestRateMode
_
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:
- Usage ratio is above 95%
- the current deposit APY is below REBALANCEUP_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 thecollateralAsset
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 => 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
- LockNFT - Delegatee locks the NFT
- AaveCollateralDeposit - Delegator deposits the collateral into Aave. And approves the delegation flow
- AaveBorrowCondition - The Delegatee claim the credit amount from Aave
- 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
- 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 => 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 => 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 => 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)
Solidity API
Common
getCurrentBlockNumber
function getCurrentBlockNumber() external view returns (uint256)
getCurrentBlockNumber get block number
Return Values
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
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | true if it is a contract address |
calculateTotalAmount
function calculateTotalAmount(uint256[] _amounts) public pure returns (uint256)
Sum the total amount given an uint array
Return Values
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)
getNvmConfigAddress
function getNvmConfigAddress() public view virtual returns (address)
getTrustedForwarder
function getTrustedForwarder() public view virtual returns (address)
Implement IERC2771Recipient
hasNVMOperatorRole
function hasNVMOperatorRole(address a) public view virtual returns (bool)
isTrustedForwarder
function isTrustedForwarder(address forwarder) public view virtual returns (bool)
_msgSender
function _msgSender() internal view virtual returns (address ret)
_msgData
function _msgData() internal view virtual returns (bytes ret)
CommonOwnable
_msgSender
function _msgSender() internal view virtual returns (address ret)
_msgData
function _msgData() internal view virtual returns (bytes ret)
CommonAccessControl
_msgSender
function _msgSender() internal view virtual returns (address ret)
_msgData
function _msgData() internal view virtual returns (bytes ret)
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
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
amount | uint256 | the amount of tokens to be requested |
Return Values
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
Parameters
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
Parameters
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
Parameters
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
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
account | address | Ethereum address |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
values | bytes32[] | is an array of elements value |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
value | bytes32 | is a bytes32 value |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
oldValue | bytes32 | is an element value in a list |
newValue | bytes32 | new value |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
from | uint256 | index is where to 'from' indexing in the list |
to | uint256 | index is where to stop indexing |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
id | bytes32 | the list identifier (the hash of list owner's address) |
value | bytes32 | is element value in list |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
value | bytes32 | is element value in list |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
value | bytes32 | is an element value in a list |
Return Values
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
Parameters
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 |
Return Values
Name | Type | Description |
---|---|---|
[0] | bytes32 | the value if exists |
size
function size(bytes32 id) external view returns (uint256)
size gets the list size
Parameters
Name | Type | Description |
---|---|---|
id | bytes32 | the list identifier (the hash of list owner's address) |
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | total length of the list |
all
function all(bytes32 id) external view returns (bytes32[])
all returns all list elements
Parameters
Name | Type | Description |
---|---|---|
id | bytes32 | the list identifier (the hash of list owner's address) |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
id | bytes32 | the list identifier (the hash of list owner's address) |
value | bytes32 | is element value in list |
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | value index in list |
ownedBy
function ownedBy(bytes32 id) external view returns (address)
ownedBy gets the list owner
Parameters
Name | Type | Description |
---|---|---|
id | bytes32 | the list identifier (the hash of list owner's address) |
Return Values
Name | Type | Description |
---|---|---|
[0] | address | list owner |
isIndexed
function isIndexed(bytes32 id) external view returns (bool)
isIndexed checks if the list is indexed
Parameters
Name | Type | Description |
---|---|---|
id | bytes32 | the list identifier (the hash of list owner's address) |
Return Values
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
nvmConfig
address nvmConfig
getNvmConfigAddress
function getNvmConfigAddress() public view returns (address)
getNvmConfigAddress get the address of the NeverminedConfig contract
Return Values
Name | Type | Description |
---|---|---|
[0] | address | NeverminedConfig contract address |
setNvmConfigAddress
function setNvmConfigAddress(address _addr) external
initialize
function initialize(address _owner, address payable _initialMinter) public
NeverminedToken Initializer Runs only on initial contract creation.
Parameters
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._
_msgSender
function _msgSender() internal view virtual returns (address ret)
_msgData
function _msgData() internal view virtual returns (bytes ret)
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 {
address templateId;
}
AgreementList
struct AgreementList {
mapping(bytes32 => struct AgreementStoreLibrary.Agreement) agreements;
mapping(bytes32 => bytes32[]) didToAgreementIds;
mapping(address => bytes32[]) templateIdToAgreementIds;
}
create
function create(struct AgreementStoreLibrary.AgreementList _self, bytes32 _id, address _templateId) internal
create new agreement checks whether the agreement Id exists, creates new agreement instance, including the template, conditions and DID.
Parameters
Name | Type | Description |
---|---|---|
_self | struct AgreementStoreLibrary.AgreementList | is AgreementList storage pointer |
_id | bytes32 | agreement identifier |
_templateId | address | template identifier |
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.
Parameters
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.
Parameters
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.
Return Values
Name | Type | Description |
---|---|---|
[0] | address | the DIDRegistry address |
getNvmConfigAddress
function getNvmConfigAddress() public view returns (address)
getNvmConfigAddress get the address of the NeverminedConfig contract
Return Values
Name | Type | Description |
---|---|---|
[0] | address | NeverminedConfig contract 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.
Parameters
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
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 |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
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
Parameters
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
Parameters
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 |
Return Values
Name | Type | Description |
---|---|---|
permissionGranted | bool | true if the access was granted |
G1Point
struct G1Point {
uint256 x;
uint256 y;
}
DleqProof
struct DleqProof {
uint256 e;
uint256 f;
}
AccessDLEQCondition
_Implementation of the Access Condition with transfer proof (DLEQ). The idea is that actors are able to share decryption keys, also there are proofs that correct keys have been shared. The system has three actors:
- Network (can be several actors with threshold signature)
- Data provider: encrypts the original data, sends decryption key to network
- Data consumer: gets a decryption key from the network
The network has secret y, and public key yG = Y
Data provider view
- Will first need to generate password (256 bits, or probably a bit less)
- The data has to be encrypted and the encrypted data is made publicly available
- Then will have to generate a secret key x
- Public key xG: identifier for the secret
- The shared secret will then be xyG (ecdh)
- The password is encrypted with the shared secret (just xor)
- The encrypted password and corresponding public key xG are stored by the network
- There could be a ZK-SNARK that gives knowledge of the hash of the password, but it depends on the curve if it’s efficient
- Data provider can forget the secret key (it shouldn’t be used again)
- In theory could forget the password, but probably the network will have to change the key like once in a year, so it will have to be resent
Consumer view
- First can download the encrypted data
- Can get the corresponding encrypted password and xG from network / smart contracts
- Will have to generate a secret key z
- So the agreement will include xG and yG, also encrypted password and zG
- The network will send y(xG+zG) to fulfill the agreement. There will probably have to be some way to send a reward to the network (re-encrytion)
- The consumer will get the shared secret by: y(xG+zG) - yzG = xyG
- Now the consumer will get the password with xor and can decrypt the downloaded data
Correctness guarantees (DLEQ proof that reencryption was correct)
Making sure that the network sends the correct result (DLEQ; discrete logarithm equality)
DLEQ basic description
- Given points G, H
- Send points X, Y
- DLEQ proves that there exists x such that X = xG and Y = xH
- In other words, G/X = H/Y
- This is a ZK proof
Proving that re-encryption is correct
- We have points G and xG+zG
- Send points Y, R (Y is the previously known public key Y=yG)
- Will prove that R = y(xG+zG)
- So just DLEQ is enough to prove the correctness_
CONDITION_TYPE
bytes32 CONDITION_TYPE
agreementStoreManager
contract AgreementStoreManager agreementStoreManager
Fulfilled
event Fulfilled(bytes32 _agreementId, uint256 _cipher, uint256[2] _secretId, uint256[2] _buyer, uint256[2] _provider, uint256[2] _reencrypt, uint256[2] _proof, bytes32 _conditionId)
lockPaymentCondition
contract LockPaymentCondition lockPaymentCondition
accessCondition
contract AccessDLEQCondition accessCondition
rewardCondition
contract EscrowPaymentCondition rewardCondition
Authorized
event Authorized(uint256[2] secret, uint256[2] buyer, bytes32 agreementId, bytes32 label)
initialize
function initialize(address _owner, address _conditionStoreManagerAddress, address _agreementStoreManagerAddress, address payable _lock, address payable _escrow) external
initialize init the contract with the following parameters
this function is called only once during the contract initialization.
Parameters
Name | Type | Description |
---|---|---|
_owner | address | contract's owner account address |
_conditionStoreManagerAddress | address | condition store manager address |
_agreementStoreManagerAddress | address | agreement store manager address |
_lock | address payable | |
_escrow | address payable |
hashValues
function hashValues(uint256 _cipher, uint256[2] _secretId, uint256[2] _provider, uint256[2] _buyer) public pure returns (bytes32)
hashValues generates the hash of condition inputs with the following parameters
Parameters
Name | Type | Description |
---|---|---|
_cipher | uint256 | is the encrypted key |
_secretId | uint256[2] | public key for the secret used in encryption |
_provider | uint256[2] | provider public key |
_buyer | uint256[2] | buyer public key |
Return Values
Name | Type | Description |
---|---|---|
[0] | bytes32 | bytes32 hash of all these values |
fulfill
function fulfill(bytes32 _agreementId, uint256 _cipher, uint256[2] _secretId, uint256[2] _provider, uint256[2] _buyer, uint256[2] _reencrypt, uint256[2] _proof) public returns (enum ConditionStoreLibrary.ConditionState)
fulfill key transfer
The key with hash _origHash is transferred to the _buyer from _provider. See the decription of the class for more details.
Parameters
Name | Type | Description |
---|---|---|
_agreementId | bytes32 | associated agreement |
_cipher | uint256 | encrypted version of the key |
_secretId | uint256[2] | |
_provider | uint256[2] | provider public key |
_buyer | uint256[2] | buyer public key |
_reencrypt | uint256[2] | Re-encryption key from provider to buyer |
_proof | uint256[2] | DLEQ proof of correctness |
Return Values
Name | Type | Description |
---|---|---|
[0] | enum ConditionStoreLibrary.ConditionState | condition state (Fulfilled/Aborted) |
Params
struct Params {
bytes32 _agreementId;
uint256 _cipher;
uint256[2] _secretId;
uint256[2] _provider;
uint256[2] _buyer;
bool ready;
}
authorized
mapping(bytes32 => mapping(bytes32 => bool)) authorized
authorizedParams
mapping(bytes32 => struct AccessDLEQCondition.Params) authorizedParams
prices
mapping(bytes32 => struct AccessDLEQCondition.SecretPrice[]) prices
network
uint256[2] network
secretOwner
mapping(bytes32 => address) secretOwner
AddSecret
event AddSecret(bytes32 h, uint256[2] secretId)
SecretPrice
struct SecretPrice {
uint256 num;
address token;
uint256 tokenType;
}
setNetworkPublicKey
function setNetworkPublicKey(uint256[2] point) public
Set network public key
Parameters
Name | Type | Description |
---|---|---|
point | uint256[2] | Public key (bn256 curve point) |
pointId
function pointId(uint256[2] point) public pure returns (bytes32)
Hash bn256 point to get an ID
Parameters
Name | Type | Description |
---|---|---|
point | uint256[2] | Bn256 curve point |
addSecret
function addSecret(uint256[2] point) public
Add a secret to the contract. The sendre will be it's owner.
Parameters
Name | Type | Description |
---|---|---|
point | uint256[2] | Public key for the secret |
addPrice
function addPrice(bytes32 id, uint256 price, address token, uint256 tokenType) public
Add price information for a secret
Parameters
Name | Type | Description |
---|---|---|
id | bytes32 | ID for the secret |
price | uint256 | Price that will be accepted for the secret |
token | address | Price token |
tokenType | uint256 | Token type, currently ERC-20 |
fulfillFromNetwork
function fulfillFromNetwork(bytes32 agreementId, uint256[2] reencrypt, uint256[2] proof) public
fulfill key transfer (by network)
Parameters
Name | Type | Description |
---|---|---|
agreementId | bytes32 | associated agreement |
reencrypt | uint256[2] | Re-encryption key from provider to buyer |
proof | uint256[2] | DLEQ proof of correctness |
fulfilled
function fulfilled(bytes32 agreementId) public view returns (bool)
check if has already been fulfilled
Parameters
Name | Type | Description |
---|---|---|
agreementId | bytes32 | associated agreement |
auth
function auth(uint256 secretId1, uint256 secretId2, bytes[] _params, bytes32[2] id) internal
authorizeAccessTemplate
function authorizeAccessTemplate(bytes32 id, bytes[] _params, uint256 priceIdx) public
Validate agreement for fulfillment by network
Parameters
Name | Type | Description |
---|---|---|
id | bytes32 | Agreement Id |
_params | bytes[] | Params fot the agreement |
priceIdx | uint256 | Price index to use |
checkParamsLock
function checkParamsLock(bytes[] _params, bytes32 sid, uint256 priceIdx) internal view
checkParamsEscrow
function checkParamsEscrow(bytes[] _params, bytes32 lockPaymentId, bytes32 transferId) internal pure
g1p
function g1p(uint256[2] p) internal pure returns (struct G1Point)
g1p Convert array to point.
Parameters
Name | Type | Description |
---|---|---|
p | uint256[2] | array [x,y] |
P
uint256 P
G1X
uint256 G1X
Gets generator of G1 group. Taken from go-ethereum/crypto/bn256/cloudflare/curve.go
G1Y
uint256 G1Y
R
uint256 R
dleqverify
function dleqverify(struct G1Point _g1, struct G1Point _g2, struct G1Point _rg1, struct G1Point _rg2, struct DleqProof _proof, bytes32 _label) internal view returns (bool)
dleqverify verify DLEQ proof
The key with hash _origHash is transferred to the _buyer from _provider. See the decription of the class for more details.
Parameters
Name | Type | Description |
---|---|---|
_g1 | struct G1Point | First base point |
_g2 | struct G1Point | Second base point |
_rg1 | struct G1Point | First base point multiplied by the secret |
_rg2 | struct G1Point | Second base point multiplied by the secret |
_proof | struct DleqProof | |
_label | bytes32 | Identifier for the proof (added to transcript) |
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | true if the proof was correct |
scalarMultiply
function scalarMultiply(struct G1Point p1, uint256 scalar) internal view returns (struct G1Point p2)
Wraps the scalar point multiplication pre-compile introduced in Byzantium. The result of a point from G1 multiplied by a scalar should match the point added to itself the same number of times. Revert if the provided point isn't on the curve.
g1Add
function g1Add(struct G1Point a, struct G1Point b) internal view returns (struct G1Point c)
isG1PointOnCurve
function isG1PointOnCurve(struct G1Point point) internal view returns (bool)
Returns true if G1 point is on the curve.
g1
function g1() public pure returns (struct G1Point)
Returns the base point.
modExp
function modExp(uint256 base, uint256 exponent, uint256 p) internal view returns (uint256 o)
Wraps the modular exponent pre-compile introduced in Byzantium. Returns base^exponent mod p.
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.
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_origHash | uint256 | is the hash of the key |
_buyer | uint256[2] | buyer public key |
_provider | uint256[2] | provider public key |
Return Values
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.
Parameters
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 |
Return Values
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.
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_did | bytes32 | Decentralized Identifier (unique compute/asset resolver) describes the compute service |
_computeConsumer | address | is the consumer's address |
Return Values
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.
Parameters
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 |
Return Values
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.
Parameters
Name | Type | Description |
---|---|---|
_did | bytes32 | Decentralized Identifier (unique compute/asset resolver) describes the compute service |
_computeConsumer | address | is the compute consumer's address |
Return Values
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
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
Parameters
Name | Type | Description |
---|---|---|
_id | bytes32 | condition identifier |
_newState | enum ConditionStoreLibrary.ConditionState | new condition state (Fulfill/Abort) |
Return Values
Name | Type | Description |
---|---|---|
[0] | enum ConditionStoreLibrary.ConditionState | the updated condition state |
fulfillWithProvenance
function fulfillWithProvenance(bytes32 _id, enum ConditionStoreLibrary.ConditionState _newState, bytes32 _did, string _name, address _user) internal returns (enum ConditionStoreLibrary.ConditionState)
abortByTimeOut
function abortByTimeOut(bytes32 _id) external returns (enum ConditionStoreLibrary.ConditionState)
abortByTimeOut set condition state to Aborted if the condition is timed out
Parameters
Name | Type | Description |
---|---|---|
_id | bytes32 | condition identifier |
Return Values
Name | Type | Description |
---|---|---|
[0] | enum ConditionStoreLibrary.ConditionState | the updated condition state |
getNvmConfigAddress
function getNvmConfigAddress() public view returns (address)
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;
}
ConditionList
struct ConditionList {
mapping(bytes32 => struct ConditionStoreLibrary.Condition) conditions;
mapping(bytes32 => mapping(bytes32 => bytes32)) map;
}
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)
Parameters
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.
Parameters
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
didRegistry
contract IExternalRegistry didRegistry
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)
createEpoch
function createEpoch(struct EpochLibrary.EpochList _self, bytes32 _id, uint256 _timeLock, uint256 _timeOut) internal
create creates new Epoch
Parameters
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) |
initialize
function initialize(address _creator, address _owner, address _nvmConfigAddress) public
initialize ConditionStoreManager Initializer Initialize Ownable. Only on contract creation,
Parameters
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 |
setProvenanceRegistry
function setProvenanceRegistry(address _didAddress) public
Set provenance registry
Parameters
Name | Type | Description |
---|---|---|
_didAddress | address | did registry address. can be zero |
getCreateRole
function getCreateRole() external view returns (address)
getCreateRole get the address of contract which has the create role
Return Values
Name | Type | Description |
---|---|---|
[0] | address | create condition role address |
getNvmConfigAddress
function getNvmConfigAddress() public view returns (address)
getNvmConfigAddress get the address of the NeverminedConfig contract
Return Values
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
Parameters
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
Parameters
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.
Parameters
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.
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_id | bytes32 | unique condition identifier |
_newState | enum ConditionStoreLibrary.ConditionState |
Return Values
Name | Type | Description |
---|---|---|
[0] | enum ConditionStoreLibrary.ConditionState | the current condition state |
_updateConditionState
function _updateConditionState(bytes32 _id, enum ConditionStoreLibrary.ConditionState _newState) internal returns (enum ConditionStoreLibrary.ConditionState)
updateConditionStateWithProvenance
function updateConditionStateWithProvenance(bytes32 _id, bytes32 _did, string name, address user, enum ConditionStoreLibrary.ConditionState _newState) external returns (enum ConditionStoreLibrary.ConditionState)
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
Return Values
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
Return Values
Name | Type | Description |
---|---|---|
[0] | enum ConditionStoreLibrary.ConditionState | condition state |
getConditionTypeRef
function getConditionTypeRef(bytes32 _id) external view virtual returns (address)
getConditionTypeRef
Return Values
Name | Type | Description |
---|---|---|
[0] | address | condition typeRef |
getMappingValue
function getMappingValue(bytes32 _id, bytes32 _key) external view virtual returns (bytes32)
getConditionState
Return Values
Name | Type | Description |
---|---|---|
[0] | bytes32 | condition state |
isConditionTimeLocked
function isConditionTimeLocked(bytes32 _id) public view returns (bool)
isConditionTimeLocked
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | whether the condition is timedLock ended |
isConditionTimedOut
function isConditionTimedOut(bytes32 _id) public view returns (bool)
isConditionTimedOut
Return Values
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.
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_preimage | uint256 | refers uint value of the hash pre-image. |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_preimage | string | refers string value of the hash pre-image. |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_preimage | bytes32 | refers bytes32 value of the hash pre-image. |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_agreementId | bytes32 | SEA agreement identifier |
_preimage | uint256 |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_agreementId | bytes32 | SEA agreement identifier |
_preimage | string |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_agreementId | bytes32 | SEA agreement identifier |
_preimage | bytes32 |
Return Values
Name | Type | Description |
---|---|---|
[0] | enum ConditionStoreLibrary.ConditionState | condition state |
_fulfill
function _fulfill(bytes32 _generatedId) private returns (enum ConditionStoreLibrary.ConditionState)
_fulfill calls super fulfil method
Parameters
Name | Type | Description |
---|---|---|
_generatedId | bytes32 | SEA agreement identifier |
Return Values
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
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 |
Return Values
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
Parameters
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 |
Return Values
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.
DENOMINATOR
uint256 DENOMINATOR
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.
Parameters
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
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 |
Return Values
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
Parameters
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 |
Return Values
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)
Parameters
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 |
Return Values
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
Parameters
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
Parameters
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)
_msgSender
function _msgSender() internal view virtual returns (address ret)
_msgData
function _msgData() internal view virtual returns (bytes ret)
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.
Parameters
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
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 |
Return Values
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
Parameters
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 |
Return Values
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
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) |
Return Values
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
Parameters
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) |
Return Values
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
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) |
Return Values
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
Parameters
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) |
Return Values
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
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 |
Return Values
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
Parameters
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 |
Return Values
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)
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
Return Values
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.
Parameters
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
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) |
Return Values
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
Parameters
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) |
Return Values
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.
Parameters
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
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 |
Return Values
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
.
Parameters
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 |
Return Values
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
Parameters
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 |
Return Values
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.
Parameters
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
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 |
Return Values
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
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) |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
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) |
Return Values
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
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_grantee | address | is the address of the granted user or the DID provider |
_documentId | bytes32 | refers to the DID |
Return Values
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.
Parameters
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
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 |
Return Values
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
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) |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
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) |
Return Values
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.
Parameters
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
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 |
Return Values
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
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 |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
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 |
Return Values
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.
Parameters
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
Return Values
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
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 |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
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) |
Return Values
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
Parameters
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
Parameters
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 |
Return Values
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
Parameters
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 |
Return Values
Name | Type | Description |
---|---|---|
[0] | enum ConditionStoreLibrary.ConditionState | condition state (Fulfilled/Aborted) |
_msgSender
function _msgSender() internal view virtual returns (address ret)
_msgData
function _msgData() internal view virtual returns (bytes ret)
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 NFT1155Upgradeable 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.
Parameters
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
Return Values
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
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 |
Return Values
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
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) |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
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
Parameters
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) |
Return Values
Name | Type | Description |
---|---|---|
[0] | enum ConditionStoreLibrary.ConditionState | condition state (Fulfilled/Aborted) |
fulfill
function fulfill(bytes32 _agreementId, bytes32 _did, address _nftReceiver, uint256 _nftAmount, bytes32 _lockPaymentCondition, address _nftContractAddress, bool _transfer, uint256 _expirationBlock) 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
Parameters
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) |
_expirationBlock | uint256 | Block in which the token expires. If zero means no expiration |
Return Values
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, 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
Parameters
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 |
Return Values
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, 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
Parameters
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-1155 NFT contract |
_transfer | bool | if yes it does a transfer if false it mints the NFT |
_expirationBlock | uint256 | Block in which the token expires. If zero means no expiration |
Return Values
Name | Type | Description |
---|---|---|
[0] | enum ConditionStoreLibrary.ConditionState | condition state (Fulfilled/Aborted) |
_msgSender
function _msgSender() internal view virtual returns (address ret)
_msgData
function _msgData() internal view virtual returns (bytes ret)
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.
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_message | bytes32 | the message to be signed |
_publicKey | address | the public key of the signing address |
Return Values
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
Parameters
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 |
Return Values
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.
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
inputConditions | bytes32[] | array of input conditions IDs |
threshold | uint256 | the required number of fulfilled input conditions |
Return Values
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.
Parameters
Name | Type | Description |
---|---|---|
_agreementId | bytes32 | agreement identifier |
_inputConditions | bytes32[] | array of input conditions IDs |
threshold | uint256 | the required number of fulfilled input conditions |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_inputConditions | bytes32[] | array of input conditions IDs |
threshold | uint256 | the required number of fulfilled input conditions |
Return Values
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.
Parameters
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
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 |
Return Values
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
Parameters
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 |
Return Values
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.
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_listAddress | address | list contract address |
_item | bytes32 | item in the list |
Return Values
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.
Parameters
Name | Type | Description |
---|---|---|
_agreementId | bytes32 | SEA agreement identifier |
_listAddress | address | list contract address |
_item | bytes32 | item in the list |
Return Values
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.
Parameters
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
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 |
Return Values
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
Parameters
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 |
Return Values
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.
Parameters
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
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 |
Return Values
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
Parameters
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 |
Return Values
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.
Parameters
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
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) |
Return Values
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
Parameters
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) |
Return Values
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
Parameters
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 agreement |
_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[] |
createClone
function createClone(address _lendingPool, address _dataProvider, address _weth, uint256 _nvmFee, uint256 _agreementFee, address _treasuryAddress, address _borrower, address _lender, address[] _conditions) external virtual returns (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
Parameters
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
Parameters
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
Parameters
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
Parameters
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
Parameters
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
Parameters
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
Parameters
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
Parameters
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
Parameters
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_
Parameters
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 |
Return Values
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.
Parameters
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
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 |
Return Values
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
Parameters
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 |
Return Values
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
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
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 |
Return Values
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
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 |
Return Values
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.
Parameters
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 |
Return Values
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, bytes32 _did) private returns (enum ConditionStoreLibrary.ConditionState)
_transferAndFulfill transfer ERC20 tokens and fulfill the condition
Parameters
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 |
_did | bytes32 |
Return Values
Name | Type | Description |
---|---|---|
[0] | enum ConditionStoreLibrary.ConditionState | condition state (Fulfilled/Aborted) |
_transferAndFulfillETH
function _transferAndFulfillETH(bytes32 _id, address[] _receivers, uint256[] _amounts, bytes32 _did) private returns (enum ConditionStoreLibrary.ConditionState)
_transferAndFulfill transfer ETH and fulfill the condition
Parameters
Name | Type | Description |
---|---|---|
_id | bytes32 | condition identifier |
_receivers | address[] | receiver's address |
_amounts | uint256[] | token amount to be locked/released |
_did | bytes32 |
Return Values
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
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
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 |
Return Values
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
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 |
Return Values
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.
Parameters
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 |
Return Values
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
Parameters
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 |
Return Values
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
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
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 |
Return Values
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
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 |
Return Values
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.
Parameters
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 |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_whoChanged | address | the address of the governor changing the parameter |
_parameter | bytes32 | the hash of the name of the parameter changed |
setMarketplaceFees
function setMarketplaceFees(uint256 _marketplaceFee, address _feeReceiver) external virtual
The governor can update the Nevermined Marketplace fees
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_address | address | The address to validate |
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | true if is a governor |
getMarketplaceFee
function getMarketplaceFee() external view virtual returns (uint256)
Returns the marketplace fee
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | the marketplace fee |
getFeeReceiver
function getFeeReceiver() external view virtual returns (address)
Returns the receiver address of the marketplace fee
Return Values
Name | Type | Description |
---|---|---|
[0] | address | the receiver address |
getProvenanceStorage
function getProvenanceStorage() external view virtual returns (bool)
Returns true if provenance should be stored in storage
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | true if provenance should be stored in storage |
getTrustedForwarder
function getTrustedForwarder() external view virtual returns (address)
Returns the address of OpenGSN forwarder contract
Return Values
Name | Type | Description |
---|---|---|
[0] | address | a address of OpenGSN forwarder contract |
hasNVMOperatorRole
function hasNVMOperatorRole(address _address) external view virtual returns (bool)
Indicates if an address is a having the OPERATOR role
Parameters
Name | Type | Description |
---|---|---|
_address | address | The address to validate |
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | true if is a governor |
NeverminedConfig
NVM_OPERATOR_ROLE
bytes32 NVM_OPERATOR_ROLE
marketplaceFee
uint256 marketplaceFee
feeReceiver
address feeReceiver
provenanceOff
bool provenanceOff
trustedForwarder
address trustedForwarder
initialize
function initialize(address _owner, address _governor, bool _provenanceOff) public
Used to initialize the contract during delegator constructor
Parameters
Name | Type | Description |
---|---|---|
_owner | address | The owner of the contract |
_governor | address | The address to be granted with the GOVERNOR_ROLE |
_provenanceOff | bool |
setMarketplaceFees
function setMarketplaceFees(uint256 _marketplaceFee, address _feeReceiver) external virtual
The governor can update the Nevermined Marketplace fees
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_address | address | The address to validate |
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | true if is a governor |
grantNVMOperatorRole
function grantNVMOperatorRole(address _address) external
revokeNVMOperatorRole
function revokeNVMOperatorRole(address _address) external
hasNVMOperatorRole
function hasNVMOperatorRole(address _address) external view returns (bool)
Indicates if an address is a having the OPERATOR role
Parameters
Name | Type | Description |
---|---|---|
_address | address | The address to validate |
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | true if is a governor |
getMarketplaceFee
function getMarketplaceFee() external view returns (uint256)
Returns the marketplace fee
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | the marketplace fee |
getFeeReceiver
function getFeeReceiver() external view returns (address)
Returns the receiver address of the marketplace fee
Return Values
Name | Type | Description |
---|---|---|
[0] | address | the receiver address |
getProvenanceStorage
function getProvenanceStorage() external view returns (bool)
Returns true if provenance should be stored in storage
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | true if provenance should be stored in storage |
getTrustedForwarder
function getTrustedForwarder() external view virtual returns (address)
Returns the address of OpenGSN forwarder contract
Return Values
Name | Type | Description |
---|---|---|
[0] | address | a address of OpenGSN forwarder contract |
setTrustedForwarder
function setTrustedForwarder(address forwarder) external
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
Parameters
Name | Type | Description |
---|---|---|
asset | address | the address of the asset |
Return Values
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()
Parameters
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()
Parameters
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
Parameters
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()
Parameters
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()
Parameters
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()
Parameters
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()
Parameters
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()
Parameters
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()
Parameters
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.
Parameters
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
Parameters
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_
Parameters
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
Parameters
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 |
Return Values
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 theinterestRateMode
_
Parameters
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
Parameters
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 |
Return Values
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
Parameters
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:
- Usage ratio is above 95%
- the current deposit APY is below REBALANCEUP_THRESHOLD * maxVariableBorrowRate, which means that too much has been borrowed at a stable rate and depositors are not earning enough
Parameters
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
Parameters
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 thecollateralAsset
plus a bonus to cover market risk_
Parameters
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
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
user | address | The address of the user |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
asset | address | The address of the underlying asset of the reserve |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
user | address | The user address |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
asset | address | The address of the underlying asset of the reserve |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
asset | address | The address of the underlying asset of the reserve |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
asset | address | The address of the underlying asset of the reserve |
Return Values
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
Parameters
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
Parameters
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
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
fromUser | address | The user to giving allowance |
toUser | address | The user to give allowance to |
Return Values
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_
Parameters
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_
Parameters
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.
Return Values
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
Return Values
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
Return Values
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
Return Values
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
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | The debt balance of the user since the last burn/mint action |
IAccessControl
checkPermissions
function checkPermissions(address _address, bytes32 _did) external view returns (bool permissionGranted)
It checks if an address (_address
) has access to a certain asset (_did
)
Parameters
Name | Type | Description |
---|---|---|
_address | address | address of the account to check if has address |
_did | bytes32 | unique identifier of the asset |
Return Values
Name | Type | Description |
---|---|---|
permissionGranted | bool | is true if the _address has access to the _did |
grantPermission
function grantPermission(address _address, bytes32 _did) external
Grants access permissions to an _address
to a specific _did
grantPermission
is called only by the _did
owner or provider
Parameters
Name | Type | Description |
---|---|---|
_address | address | address of the account to check if has address |
_did | bytes32 | unique identifier of the asset |
renouncePermission
function renouncePermission(address _address, bytes32 _did) external
Renounce access permissions to an _address
to a specific _did
renouncePermission
is called only by the _did
owner or provider
Parameters
Name | Type | Description |
---|---|---|
_address | address | address of the account to check if has address |
_did | bytes32 | unique identifier of the asset |
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)
IExternalRegistry
used
function used(bytes32 _provId, bytes32 _did, address _agentId, bytes32 _activityId, bytes _signatureUsing, string _attributes) external returns (bool success)
getDIDOwner
function getDIDOwner(bytes32 _did) external view returns (address didOwner)
isDIDProvider
function isDIDProvider(bytes32 _did, address _provider) external view returns (bool)
isDIDProviderOrOwner
function isDIDProviderOrOwner(bytes32 _did, address _provider) external view 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
Parameters
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) |
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
G1Point
struct G1Point {
uint256 x;
uint256 y;
}
DleqProof
struct DleqProof {
uint256 f;
uint256 e;
}
Bn128
Implementations of common elliptic curve operations on Ethereum's alt_bn128 curve. Whenever possible, use post-Byzantium pre-compiled contracts to offset gas costs.
P
uint256 P
G1X
uint256 G1X
Gets generator of G1 group. Taken from go-ethereum/crypto/bn256/cloudflare/curve.go
G1Y
uint256 G1Y
R
uint256 R
dleqverify
function dleqverify(struct G1Point _g1, struct G1Point _g2, struct G1Point _rg1, struct G1Point _rg2, struct DleqProof _proof, bytes32 _label) internal view returns (bool)
g1Zero
function g1Zero() internal pure returns (struct G1Point)
scalarMultiply
function scalarMultiply(struct G1Point p1, uint256 scalar) internal view returns (struct G1Point p2)
Wraps the scalar point multiplication pre-compile introduced in Byzantium. The result of a point from G1 multiplied by a scalar should match the point added to itself the same number of times. Revert if the provided point isn't on the curve.
g1Add
function g1Add(struct G1Point a, struct G1Point b) internal view returns (struct G1Point c)
Wraps the point addition pre-compile introduced in Byzantium. Returns the sum of two points on G1. Revert if the provided points are not on the curve.
isG1PointOnCurve
function isG1PointOnCurve(struct G1Point point) internal view returns (bool)
Returns true if G1 point is on the curve.
g1
function g1() public pure returns (struct G1Point)
ModUtils
modExp
function modExp(uint256 base, uint256 exponent, uint256 p) internal view returns (uint256 o)
Wraps the modular exponent pre-compile introduced in Byzantium. Returns base^exponent mod p.
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;
}
isTimedOut
function isTimedOut(struct EpochLibrary.EpochList _self, bytes32 _id) internal view returns (bool)
isTimedOut means you cannot fulfill after
Parameters
Name | Type | Description |
---|---|---|
_self | struct EpochLibrary.EpochList | is the Epoch storage pointer |
_id | bytes32 |
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | true if the current block number is gt timeOut |
isTimeLocked
function isTimeLocked(struct EpochLibrary.EpochList _self, bytes32 _id) internal view returns (bool)
isTimeLocked means you cannot fulfill before
Parameters
Name | Type | Description |
---|---|---|
_self | struct EpochLibrary.EpochList | is the Epoch storage pointer |
_id | bytes32 |
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | true if the current block number is gt timeLock |
getEpochTimeOut
function getEpochTimeOut(struct EpochLibrary.Epoch _self) internal view returns (uint256)
getEpochTimeOut
Parameters
Name | Type | Description |
---|---|---|
_self | struct EpochLibrary.Epoch | is the Epoch storage pointer |
getEpochTimeLock
function getEpochTimeLock(struct EpochLibrary.Epoch _self) internal view returns (uint256)
getEpochTimeLock
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_self | struct HashListLibrary.List | is a pointer to list in the storage |
value | bytes32 | is a bytes32 value |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_self | struct HashListLibrary.List | is a pointer to list in the storage |
values | bytes32[] | is an array of elements value |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_self | struct HashListLibrary.List | is a pointer to list in the storage |
value | bytes32 | is an element value in a list |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_self | struct HashListLibrary.List | is a pointer to list in the storage |
value | bytes32 | is element value in list |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_self | struct HashListLibrary.List | is a pointer to list in the storage |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_self | struct HashListLibrary.List | is a pointer to list in the storage |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_self | struct HashListLibrary.List | is a pointer to list in the storage |
value | bytes32 | is element value in list |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_self | struct HashListLibrary.List | is a pointer to list in the storage |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_self | struct HashListLibrary.List | is a pointer to list in the storage |
Return Values
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
Parameters
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
nvmConfig
address nvmConfig
getNvmConfigAddress
function getNvmConfigAddress() public view returns (address)
getNvmConfigAddress get the address of the NeverminedConfig contract
Return Values
Name | Type | Description |
---|---|---|
[0] | address | NeverminedConfig contract address |
setNvmConfigAddress
function setNvmConfigAddress(address _addr) external
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
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
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
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
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)
onlyOwnerProviderOrDelegated
modifier onlyOwnerProviderOrDelegated(bytes32 _did)
onlyValidAttributes
modifier onlyValidAttributes(string _attributes)
nftIsInitialized
modifier nftIsInitialized(bytes32 _did)
DIDAttributeRegistered
event DIDAttributeRegistered(bytes32 _did, address _owner, bytes32 _checksum, string _value, address _lastUpdatedBy, uint256 _blockNumberUpdated)
DID Events
DIDMetadataUpdated
event DIDMetadataUpdated(bytes32 _did, address _owner, bytes32 _checksum, string _url, string _immutableUrl)
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)
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.
Parameters
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 _immutableUrl) public virtual
Register DID attributes.
The first attribute of a DID registered sets the DID owner. Subsequent updates record _checksum and update info.
Parameters
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 |
_immutableUrl | string | refers to url stored in an immutable storage network like IPFS, Filecoin, Arweave |
updateMetadataUrl
function updateMetadataUrl(bytes32 _did, bytes32 _checksum, string _url, string _immutableUrl) public virtual
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
Parameters
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 |
Return Values
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
Parameters
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 |
Return Values
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)
Parameters
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 |
Return Values
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
Parameters
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.
Parameters
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
Parameters
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.
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_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
Parameters
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
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_did | bytes32 | refers to decentralized identifier (a bytes32 length ID) |
_grantee | address | address |
Return Values
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
Parameters
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 royalties, string immutableUrl, bool nftInitialized)
Parameters
Name | Type | Description |
---|---|---|
_did | bytes32 | refers to decentralized identifier (a bytes32 length ID). |
Return Values
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 |
royalties | uint256 | the royalties amount |
immutableUrl | string | includes the url to the DDO in immutable storage |
nftInitialized | bool | if the NFT has been initialized |
getNFTInfo
function getNFTInfo(bytes32 _did) public view returns (address nftContractAddress, bool nftInitialized)
getBlockNumberUpdated
function getBlockNumberUpdated(bytes32 _did) public view returns (uint256 blockNumberUpdated)
Parameters
Name | Type | Description |
---|---|---|
_did | bytes32 | refers to decentralized identifier (a bytes32 length ID). |
Return Values
Name | Type | Description |
---|---|---|
blockNumberUpdated | uint256 | last modified (update) block number of a DID. |
getDIDOwner
function getDIDOwner(bytes32 _did) public view returns (address didOwner)
Parameters
Name | Type | Description |
---|---|---|
_did | bytes32 | refers to decentralized identifier (a bytes32 length ID). |
Return Values
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
Parameters
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
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_did | bytes32 | refers to decentralized identifier (a bytes32 length ID) |
_grantee | address | address |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_provId | bytes32 | refers to the provenance identifier |
Return Values
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
Parameters
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 _msgSender() is owner, provider or delegate for a DID given
Parameters
Name | Type | Description |
---|---|---|
_did | bytes32 | refers to decentralized identifier (a bytes32 length ID). |
Return Values
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
Parameters
Name | Type | Description |
---|---|---|
_did | bytes32 | refers to decentralized identifier (a bytes32 length ID). |
_delegate | address | delegate's address. |
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | boolean true if yes |
getProvenanceOwner
function getProvenanceOwner(bytes32 _did) public view returns (address provenanceOwner)
Parameters
Name | Type | Description |
---|---|---|
_did | bytes32 | refers to decentralized identifier (a bytes32 length ID). |
Return Values
Name | Type | Description |
---|---|---|
provenanceOwner | address | the address of the Provenance owner. |
DIDRegistry
_Implementation of an on-chain registry of assets. It allows users to register their digital assets and the on-chain resolution of them via a Decentralized Identifier (DID) into their Metadata (DDO).
The permissions are organized in different levels:
- Contract Ownership Level. At the top level the DID Registry contract is 'Ownable' so the owner (typically the deployer) of the contract can manage everything in the registry.
- Contract Operator Level. At the second level we have the Registry contract operator
REGISTRY_OPERATOR_ROLE
. Typically this role is granted to some Nevermined contracts to automate the execution of common functions. This role is managed using thegrantRegistryOperatorRole
andrevokeRegistryOperatorRole
function - Asset Access Level. Asset owners can provide individual asset permissions to external providers via the
addProvider
function. Providers typically (Nevermined Nodes) can manage asset access. - Asset Provenance Level. Provenance delegates can register provenance events at asset level._
erc1155
contract NFT1155Upgradeable erc1155
erc721
contract NFT721Upgradeable erc721
royaltiesCheckers
mapping(address => bool) royaltiesCheckers
defaultRoyalties
contract StandardRoyalties defaultRoyalties
nvmConfig
contract INVMConfig nvmConfig
REGISTRY_OPERATOR_ROLE
bytes32 REGISTRY_OPERATOR_ROLE
onlyRegistryOperator
modifier onlyRegistryOperator()
initialize
function initialize(address _owner, address _erc1155, address _erc721, address _config, address _royalties) public
DIDRegistry Initializer Initialize Ownable. Only on contract creation.
Parameters
Name | Type | Description |
---|---|---|
_owner | address | refers to the owner of the contract. |
_erc1155 | address | |
_erc721 | address | |
_config | address | |
_royalties | address |
setDefaultRoyalties
function setDefaultRoyalties(address _royalties) public
registerRoyaltiesChecker
function registerRoyaltiesChecker(address _addr) public
setNFT1155
function setNFT1155(address _erc1155) public
grantRegistryOperatorRole
function grantRegistryOperatorRole(address account) public virtual
revokeRegistryOperatorRole
function revokeRegistryOperatorRole(address account) public virtual
isRegistryOperator
function isRegistryOperator(address operator) public view virtual returns (bool)
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
transferDIDOwnershipManaged
function transferDIDOwnershipManaged(address _sender, bytes32 _did, address _newOwner) external
transferDIDOwnershipManaged transfer DID ownership
Parameters
Name | Type | Description |
---|---|---|
_sender | address | |
_did | bytes32 | refers to decentralized identifier (a bytes32 length ID) |
_newOwner | address | new owner address |
registerMintableDID
function registerMintableDID(bytes32 _didSeed, address _nftContractAddress, bytes32 _checksum, address[] _providers, string _url, uint256 _cap, uint256 _royalties, bool _mint, bytes32 _activityId, string _nftMetadata, string _immutableUrl) 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.
Parameters
Name | Type | Description |
---|---|---|
_didSeed | bytes32 | refers to decentralized identifier seed (a bytes32 length ID). |
_nftContractAddress | address | is the address of the NFT contract associated to the asset |
_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 | uint256 | 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 |
_immutableUrl | string | includes the url to the DDO in immutable storage |
registerMintableDID721
function registerMintableDID721(bytes32 _didSeed, address _nftContractAddress, bytes32 _checksum, address[] _providers, string _url, uint256 _royalties, bool _mint, bytes32 _activityId, string _immutableUrl) 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.
Parameters
Name | Type | Description |
---|---|---|
_didSeed | bytes32 | refers to decentralized identifier seed (a bytes32 length ID). |
_nftContractAddress | address | address of the NFT contract associated to the asset |
_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 | uint256 | 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 |
_immutableUrl | string | includes the url to the DDO in immutable storage |
registerMintableDID
function registerMintableDID(bytes32 _didSeed, address _nftContractAddress, bytes32 _checksum, address[] _providers, string _url, uint256 _cap, uint256 _royalties, bytes32 _activityId, string _nftMetadata, string _immutableUrl) public
Register a Mintable DID.
The first attribute of a DID registered sets the DID owner. Subsequent updates record _checksum and update info.
Parameters
Name | Type | Description |
---|---|---|
_didSeed | bytes32 | refers to decentralized identifier seed (a bytes32 length ID). |
_nftContractAddress | address | address of the NFT contract associated to the asset |
_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 | uint256 | 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 |
_immutableUrl | string | includes the url to the DDO in immutable storage |
enableAndMintDidNft
function enableAndMintDidNft(bytes32 _did, address _nftAddress, uint256 _cap, uint256 _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
Parameters
Name | Type | Description |
---|---|---|
_did | bytes32 | refers to decentralized identifier (a byte32 length ID) |
_nftAddress | address | |
_cap | uint256 | refers to the mint cap |
_royalties | uint256 | 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, address _nftContractAddress, uint256 _royalties, bool _mint) 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
Parameters
Name | Type | Description |
---|---|---|
_did | bytes32 | refers to decentralized identifier (a byte32 length ID) |
_nftContractAddress | address | address of the NFT contract associated to the asset |
_royalties | uint256 | 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 |
_provenanceStorage
function _provenanceStorage() internal view returns (bool)
registerUsedProvenance
function registerUsedProvenance(bytes32 _did, bytes32 _cond, string name, address user) public
getNvmConfigAddress
function getNvmConfigAddress() public view returns (address)
getNvmConfigAddress get the address of the NeverminedConfig contract
Return Values
Name | Type | Description |
---|---|---|
[0] | address | NeverminedConfig contract address |
DIDRegistryLibrary
All function calls are currently implemented without side effects
DIDRegister
struct DIDRegister {
address owner;
uint8 royalties;
bool nftInitialized;
address nftContractAddress;
address creator;
bytes32 lastChecksum;
string url;
address lastUpdatedBy;
uint256 blockNumberUpdated;
address[] providers;
address[] delegates;
address royaltyRecipient;
contract IRoyaltyScheme royaltyScheme;
string immutableUrl;
}
DIDRegisterList
struct DIDRegisterList {
mapping(bytes32 => struct DIDRegistryLibrary.DIDRegister) didRegisters;
}
update
function update(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, bytes32 _checksum, string _url, address _sender, string _immutableUrl) internal
update the DID store
access modifiers and storage pointer should be implemented in DIDRegistry
Parameters
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) |
_sender | address | the address of the user updating the entry |
_immutableUrl | string | includes the url to the DDO in immutable storage |
initializeNftConfig
function initializeNftConfig(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, address _nftContractAddress, contract IRoyaltyScheme _royaltyHandler) 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 nftContract and royalties configuration
Parameters
Name | Type | Description |
---|---|---|
_self | struct DIDRegistryLibrary.DIDRegisterList | refers to storage pointer |
_did | bytes32 | refers to decentralized identifier (a byte32 length ID) |
_nftContractAddress | address | |
_royaltyHandler | contract IRoyaltyScheme | contract for handling royalties |
initializeNft721Config
function initializeNft721Config(struct DIDRegistryLibrary.DIDRegisterList _self, bytes32 _did, address _nftContractAddress, contract IRoyaltyScheme _royaltyHandler) 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
Parameters
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 |
Return Values
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
Parameters
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
Parameters
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
Parameters
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) internal view returns (bool)
isProvider check whether DID provider exists
Parameters
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 |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
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
Parameters
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) internal view returns (bool)
isDelegate check whether DID delegate exists
Parameters
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 |
Return Values
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
Parameters
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 |
Return Values
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 => 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)
_provenanceStorage
function _provenanceStorage() internal virtual returns (bool)
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
create an event in the Provenance store
access modifiers and storage pointer should be implemented in ProvenanceRegistry
Parameters
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
Parameters
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 |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
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 |
Return Values
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
Parameters
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 |
Return Values
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)
Parameters
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 |
Return Values
Name | Type | Description |
---|---|---|
success | bool | true if the action was properly registered |
_msgSender
function _msgSender() internal view virtual returns (address ret)
_msgData
function _msgData() internal view virtual returns (bytes ret)
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
Parameters
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)
getNvmConfigAddress
function getNvmConfigAddress() public view returns (address)
getNvmConfigAddress get the address of the NeverminedConfig contract
Return Values
Name | Type | Description |
---|---|---|
[0] | address | NeverminedConfig contract address |
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
Parameters
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
Parameters
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
Parameters
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)
getNvmConfigAddress
function getNvmConfigAddress() public view returns (address)
getNvmConfigAddress get the address of the NeverminedConfig contract
Return Values
Name | Type | Description |
---|---|---|
[0] | address | NeverminedConfig contract address |
AaveCreditTemplate
_Implementation of the Aaven Credit Agreement Template 0. Initialize the agreement
- LockNFT - Delegatee locks the NFT
- AaveCollateralDeposit - Delegator deposits the collateral into Aave. And approves the delegation flow
- AaveBorrowCondition - The Delegatee claim the credit amount from Aave
- 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
- 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.
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_newFee | uint256 | New nevermined fee expressed in basis points |
changeCreditVaultLibrary
function changeCreditVaultLibrary(address _vaultLibrary) public
AccessDLEQTemplate
Implementation of Access Agreement Template
didRegistry
contract DIDRegistry didRegistry
accessCondition
contract AccessDLEQCondition 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.
Parameters
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 |
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.
Parameters
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.
Parameters
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
Parameters
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
Return Values
Name | Type | Description |
---|---|---|
[0] | address[] | list of conditions contract addresses |
getNvmConfigAddress
function getNvmConfigAddress() public view returns (address)
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 => 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
Parameters
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, bytes32 did)
getAgreementData return the agreement Data
Parameters
Name | Type | Description |
---|---|---|
_id | bytes32 | SEA agreement unique identifier |
Return Values
Name | Type | Description |
---|---|---|
accessConsumer | address | the agreement consumer |
accessProvider | address | the provider addresses |
did | bytes32 |
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.
Parameters
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 => 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.
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_conditionAddress | address | condition contract address |
Return Values
Name | Type | Description |
---|---|---|
length | uint256 | conditionTypes array size |
removeLastTemplateCondition
function removeLastTemplateCondition() external returns (address[])
removeLastTemplateCondition removes last condition added to the template
Return Values
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.
Parameters
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)
NFT721AccessDLEQTemplate
Implementation of NFT721 Access Proof Template
NFT721AccessProofTemplate
Implementation of NFT721 Access Proof Template
NFT721AccessSwapTemplate
NFT721AccessTemplate
Implementation of NFT Access Template
NFT721SalesTemplate
Implementation of NFT Sales Template
NFT721SalesWithDLEQTemplate
NFT721SalesWithAccessTemplate
NFTAccessDLEQTemplate
_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 AccessDLEQCondition 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.
Parameters
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 |
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.
Parameters
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.
Parameters
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.
Parameters
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.
Parameters
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.
Parameters
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 |
NFTSalesWithDLEQTemplate
_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 AccessDLEQCondition 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.
Parameters
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 => struct TemplateStoreLibrary.Template) templates;
address[] templateIds;
}
propose
function propose(struct TemplateStoreLibrary.TemplateList _self, address _id, address _sender) internal returns (uint256 size)
propose new template
Parameters
Name | Type | Description |
---|---|---|
_self | struct TemplateStoreLibrary.TemplateList | is the TemplateList storage pointer |
_id | address | proposed template contract address |
_sender | address |
Return Values
Name | Type | Description |
---|---|---|
size | uint256 | which is the index of the proposed template |
approve
function approve(struct TemplateStoreLibrary.TemplateList _self, address _id, address _sender) internal
approve new template
Parameters
Name | Type | Description |
---|---|---|
_self | struct TemplateStoreLibrary.TemplateList | is the TemplateList storage pointer |
_id | address | proposed template contract address |
_sender | address |
revoke
function revoke(struct TemplateStoreLibrary.TemplateList _self, address _id, address _sender) internal
revoke new template
Parameters
Name | Type | Description |
---|---|---|
_self | struct TemplateStoreLibrary.TemplateList | is the TemplateList storage pointer |
_id | address | approved template contract address |
_sender | 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
nvmConfig
address nvmConfig
onlyOwnerOrTemplateOwner
modifier onlyOwnerOrTemplateOwner(address _id)
initialize
function initialize(address _owner) public
initialize TemplateStoreManager Initializer Initializes Ownable. Only on contract creation.
Parameters
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
Parameters
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
Parameters
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
Parameters
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
Parameters
Name | Type | Description |
---|---|---|
_id | address | unique template identifier which is basically the template contract address. |
Return Values
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
Return Values
Name | Type | Description |
---|---|---|
size | uint256 | number of templates |
isTemplateApproved
function isTemplateApproved(address _id) external view returns (bool)
isTemplateApproved check whether the template is approved
Parameters
Name | Type | Description |
---|---|---|
_id | address | unique template identifier which is basically the template contract address. |
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | true if the template is approved |
getNvmConfigAddress
function getNvmConfigAddress() public view returns (address)
getNvmConfigAddress get the address of the NeverminedConfig contract
Return Values
Name | Type | Description |
---|---|---|
[0] | address | NeverminedConfig contract address |
setNvmConfigAddress
function setNvmConfigAddress(address _addr) external
IForwarder
ForwardRequest
struct ForwardRequest {
address from;
address to;
uint256 value;
uint256 gas;
uint256 nonce;
bytes data;
uint256 validUntil;
}
DomainRegistered
event DomainRegistered(bytes32 domainSeparator, bytes domainValue)
RequestTypeRegistered
event RequestTypeRegistered(bytes32 typeHash, string typeStr)
getNonce
function getNonce(address from) external view returns (uint256)
verify
function verify(struct IForwarder.ForwardRequest forwardRequest, bytes32 domainSeparator, bytes32 requestTypeHash, bytes suffixData, bytes signature) external view
verify the transaction would execute. validate the signature and the nonce of the request. revert if either signature or nonce are incorrect. also revert if domainSeparator or requestTypeHash are not registered.
execute
function execute(struct IForwarder.ForwardRequest forwardRequest, bytes32 domainSeparator, bytes32 requestTypeHash, bytes suffixData, bytes signature) external payable returns (bool success, bytes ret)
execute a transaction
Parameters
Name | Type | Description |
---|---|---|
forwardRequest | struct IForwarder.ForwardRequest | - all transaction parameters |
domainSeparator | bytes32 | - domain used when signing this request |
requestTypeHash | bytes32 | - request type used when signing this request. |
suffixData | bytes | - the extension data used when signing this request. |
signature | bytes | - signature to validate. the transaction is verified, and then executed. the success and ret of "call" are returned. This method would revert only verification errors. target errors are reported using the returned "success" and ret string |
registerRequestType
function registerRequestType(string typeName, string typeSuffix) external
Register a new Request typehash.
Parameters
Name | Type | Description |
---|---|---|
typeName | string | - the name of the request type. |
typeSuffix | string | - any extra data after the generic params. (must add at least one param. The generic ForwardRequest type is always registered by the constructor) |
registerDomainSeparator
function registerDomainSeparator(string name, string version) external
Register a new domain separator. The domain separator must have the following fields: name,version,chainId, verifyingContract. the chainId is the current network's chainId, and the verifyingContract is this forwarder. This method is given the domain name and version to create and register the domain separator value.
Parameters
Name | Type | Description |
---|---|---|
name | string | the domain's display name |
version | string | the domain/protocol version |
Forwarder
GENERIC_PARAMS
string GENERIC_PARAMS
EIP712_DOMAIN_TYPE
string EIP712_DOMAIN_TYPE
typeHashes
mapping(bytes32 => bool) typeHashes
domains
mapping(bytes32 => bool) domains
nonces
mapping(address => uint256) nonces
receive
receive() external payable
getNonce
function getNonce(address from) public view returns (uint256)
constructor
constructor() public
verify
function verify(struct IForwarder.ForwardRequest req, bytes32 domainSeparator, bytes32 requestTypeHash, bytes suffixData, bytes sig) external view
execute
function execute(struct IForwarder.ForwardRequest req, bytes32 domainSeparator, bytes32 requestTypeHash, bytes suffixData, bytes sig) external payable returns (bool success, bytes ret)
_verifyNonce
function _verifyNonce(struct IForwarder.ForwardRequest req) internal view
_verifyAndUpdateNonce
function _verifyAndUpdateNonce(struct IForwarder.ForwardRequest req) internal
registerRequestType
function registerRequestType(string typeName, string typeSuffix) external
Register a new Request typehash.
Parameters
Name | Type | Description |
---|---|---|
typeName | string | - the name of the request type. |
typeSuffix | string | - any extra data after the generic params. (must add at least one param. The generic ForwardRequest type is always registered by the constructor) |
registerDomainSeparator
function registerDomainSeparator(string name, string version) external
Register a new domain separator. The domain separator must have the following fields: name,version,chainId, verifyingContract. the chainId is the current network's chainId, and the verifyingContract is this forwarder. This method is given the domain name and version to create and register the domain separator value.
Parameters
Name | Type | Description |
---|---|---|
name | string | the domain's display name |
version | string | the domain/protocol version |
registerRequestTypeInternal
function registerRequestTypeInternal(string requestType) internal
_verifySig
function _verifySig(struct IForwarder.ForwardRequest req, bytes32 domainSeparator, bytes32 requestTypeHash, bytes suffixData, bytes sig) internal view
_getEncoded
function _getEncoded(struct IForwarder.ForwardRequest req, bytes32 requestTypeHash, bytes suffixData) public pure returns (bytes)
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
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
TestERC721
initialize
function initialize() public
mint
function mint(uint256 id) public
EpochLibraryProxy
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
NVM_OPERATOR_ROLE
bytes32 NVM_OPERATOR_ROLE
RoyaltyInfo
struct RoyaltyInfo {
address receiver;
uint256 royaltyAmount;
}
NFTAttributes
struct NFTAttributes {
bool nftInitialized;
uint256 nftSupply;
uint256 mintCap;
string nftURI;
}
_royalties
mapping(uint256 => struct NFTBase.RoyaltyInfo) _royalties
_nftAttributes
mapping(uint256 => struct NFTBase.NFTAttributes) _nftAttributes
_expiration
mapping(address => uint256) _expiration
_contractMetadataUri
string _contractMetadataUri
nvmConfig
address nvmConfig
NFTCloned
event NFTCloned(address _newAddress, address _fromAddress, uint256 _ercType)
onlyOperatorOrOwner
modifier onlyOperatorOrOwner()
getNvmConfigAddress
function getNvmConfigAddress() public view returns (address)
getNvmConfigAddress get the address of the NeverminedConfig contract
Return Values
Name | Type | Description |
---|---|---|
[0] | address | NeverminedConfig contract address |
setNvmConfigAddress
function setNvmConfigAddress(address _addr) external
_setNFTAttributes
function _setNFTAttributes(uint256 tokenId, uint256 nftSupply, uint256 mintCap, string tokenURI) internal
_setNFTMetadata
function _setNFTMetadata(uint256 tokenId, string tokenURI) internal
getNFTAttributes
function getNFTAttributes(uint256 tokenId) external view virtual returns (bool nftInitialized, uint256 nftSupply, uint256 mintCap, string nftURI)
_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
setContractMetadataUri
function setContractMetadataUri(string _uri) public virtual
Record the URI storing the Metadata describing the NFT Contract More information about the file format here: https://docs.opensea.io/docs/contract-level-metadata
Parameters
Name | Type | Description |
---|---|---|
_uri | string | the URI (https, ipfs, etc) to the metadata describing the NFT Contract |
contractURI
function contractURI() public view returns (string)
grantOperatorRole
function grantOperatorRole(address account) public virtual
revokeOperatorRole
function revokeOperatorRole(address account) public virtual
renounceOperatorRole
function renounceOperatorRole() public virtual
isOperator
function isOperator(address operator) public view virtual returns (bool)
_msgSender
function _msgSender() internal view virtual returns (address ret)
_msgData
function _msgData() internal view virtual returns (bytes ret)
nftType
function nftType() external pure virtual returns (bytes32)
NFT1155SubscriptionUpgradeable
MintedTokens
struct MintedTokens {
uint256 amountMinted;
uint256 expirationBlock;
uint256 mintBlock;
bool isMintOps;
}
_tokens
mapping(bytes32 => struct NFT1155SubscriptionUpgradeable.MintedTokens[]) _tokens
nftType
bytes32 nftType
initialize
function initialize(address owner, address didRegistryAddress, string name_, string symbol_, string uri_, address nvmConfig_) public virtual
mint
function mint(address to, uint256 tokenId, uint256 amount, bytes data) public virtual
mint
function mint(address to, uint256 tokenId, uint256 amount, uint256 expirationBlock, bytes data) public virtual
This mint function allows to define when the tokenId of the NFT expires. The minter should calculate this block number depending on the network velocity
burn
function burn(uint256 id, uint256 amount) public
burn
function burn(address to, uint256 id, uint256 amount) public
burn
function burn(address to, uint256 id, uint256 amount, uint256 _seed) public
balanceOf
function balanceOf(address account, uint256 tokenId) public view virtual returns (uint256)
See {NFT1155Upgradeableable-balanceOf}.
whenWasMinted
function whenWasMinted(address owner, uint256 tokenId) public view returns (uint256[])
getMintedEntries
function getMintedEntries(address owner, uint256 tokenId) public view returns (struct NFT1155SubscriptionUpgradeable.MintedTokens[])
_getTokenKey
function _getTokenKey(address account, uint256 tokenId) internal pure returns (bytes32)
mintBatch
function mintBatch(address to, uint256[] ids, uint256[] amounts, uint256[] expirations, bytes data) external
burnBatch
function burnBatch(address from, uint256[] ids, uint256[] amounts) external
burnBatchFromHolders
function burnBatchFromHolders(address[] from, uint256[] ids, uint256[] amounts) external
NFT1155SubscriptionWithoutBlocks
nftType
bytes32 nftType
initialize
function initialize(address owner, address didRegistryAddress, string name_, string symbol_, string uri_, address nvmConfig_) public virtual
mint
function mint(address to, uint256 tokenId, uint256 amount, bytes data) public virtual
burn
function burn(uint256 id, uint256 amount) public
burn
function burn(address to, uint256 id, uint256 amount) public
balanceOf
function balanceOf(address account, uint256 tokenId) public view virtual returns (uint256)
See {NFT1155Upgradeableable-balanceOf}.
mintBatch
function mintBatch(address to, uint256[] ids, uint256[] amounts, bytes data) external
burnBatch
function burnBatch(address from, uint256[] ids, uint256[] amounts) external
burnBatchFromHolders
function burnBatchFromHolders(address[] from, uint256[] ids, uint256[] amounts) external
NFT1155Upgradeable
Implementation of the basic standard multi-token. See https://eips.ethereum.org/EIPS/eip-1155
name
string name
symbol
string symbol
nftRegistry
contract IExternalRegistry nftRegistry
initialize
function initialize(address owner, address didRegistryAddress, string name_, string symbol_, string uri_, address nvmConfig_) public virtual
__NFT1155Upgradeable_init
function __NFT1155Upgradeable_init(address owner, address didRegistryAddress, string name_, string symbol_, string uri_, address nvmConfig_) public virtual
__NFT1155Upgradeable_unchained
function __NFT1155Upgradeable_unchained(address owner, address didRegistryAddress, string name_, string symbol_, string uri_, address nvmConfig_) public virtual
createClone
function createClone(string _name, string _symbol, string _uri, address[] _operators) external virtual returns (address)
isApprovedForAll
function isApprovedForAll(address account, address operator) public view virtual returns (bool)
See {IERC1155-isApprovedForAll}.
mint
function mint(uint256 id, uint256 amount) public
mint
function mint(address to, uint256 id, uint256 amount, bytes data) public virtual
burn
function burn(uint256 id, uint256 amount) public virtual
burn
function burn(address to, uint256 id, uint256 amount) public virtual
burn
function burn(address to, uint256 id, uint256 amount, uint256 seed) public virtual
uri
function uri(uint256 tokenId) public view returns (string)
setNFTAttributes
function setNFTAttributes(uint256 tokenId, uint256 nftSupply, uint256 mintCap, string nftURI) public
Record some NFT Metadata
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | the id of the asset with the royalties associated |
nftSupply | uint256 | the NFTs supply |
mintCap | uint256 | the max number of editions that can be minted |
nftURI | string | the URI (https, ipfs, etc) to the metadata describing the NFT |
setNFTMetadata
function setNFTMetadata(uint256 tokenId, string nftURI) public
Record some NFT Metadata
Parameters
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
Parameters
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)
_msgSender
function _msgSender() internal view virtual returns (address ret)
_msgData
function _msgData() internal view virtual returns (bytes ret)
_beforeTokenTransfer
function _beforeTokenTransfer(address operator, address from, address to, uint256[] ids, uint256[] amounts, bytes data) internal virtual
It protects NFT transfers to force going through service agreements and enforce royalties
nftType
function nftType() external pure virtual returns (bytes32)
NFT721SubscriptionUpgradeable
MintedTokens
struct MintedTokens {
uint256 tokenId;
uint256 expirationBlock;
uint256 mintBlock;
}
_tokens
mapping(address => struct NFT721SubscriptionUpgradeable.MintedTokens[]) _tokens
nftType
bytes32 nftType
initialize
function initialize(address owner, address didRegistryAddress, string name, string symbol, string uri, uint256 cap, address nvmConfig_) public
mint
function mint(address to, uint256 tokenId, 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 NVM_OPERATOR_ROLE
_
burn
function burn(uint256 tokenId) public
Burning tokens does not decrement the counter of tokens minted! This is by design.
balanceOf
function balanceOf(address owner) public view returns (uint256)
See {IERC721-balanceOf}.
whenWasMinted
function whenWasMinted(address owner) public view returns (uint256[])
getMintedEntries
function getMintedEntries(address owner) public view returns (struct NFT721SubscriptionUpgradeable.MintedTokens[])
NFT721Upgradeable
Implementation of the basic standard multi-token.
_nftContractCap
uint256 _nftContractCap
nftRegistry
contract IExternalRegistry nftRegistry
_counterMinted
struct CountersUpgradeable.Counter _counterMinted
initialize
function initialize(address owner, address didRegistryAddress, string name, string symbol, string uri, uint256 cap, address nvmConfig_) public virtual
__NFT721Upgradeable_init
function __NFT721Upgradeable_init(address owner, address didRegistryAddress, string name, string symbol, string uri, uint256 cap, address nvmConfig_) internal
__NFT721Upgradeable_unchained
function __NFT721Upgradeable_unchained(address owner, address didRegistryAddress, string uri, uint256 cap, address nvmConfig_) internal
createClone
function createClone(string name, string symbol, string uri, uint256 cap, address[] _operators) external virtual returns (address)
isApprovedForAll
function isApprovedForAll(address account, address operator) public view virtual returns (bool)
mint
function mint(address to, uint256 tokenId) public virtual
mint
function mint(uint256 tokenId) public virtual
getHowManyMinted
function getHowManyMinted() public view returns (uint256)
burn
function burn(uint256 tokenId) public virtual
Burning tokens does not decrement the counter of tokens minted! This is by design.
_baseURI
function _baseURI() internal view virtual returns (string)
Base URI for computing {tokenURI}. If set, the resulting URI for each
token will be the concatenation of the baseURI
and the tokenId
. Empty
by default, can be overridden in child contracts.
setNFTMetadata
function setNFTMetadata(uint256 tokenId, string nftURI) public
Record some NFT Metadata
Parameters
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 |
tokenURI
function tokenURI(uint256 tokenId) public view virtual returns (string)
See {IERC721Metadata-tokenURI}.
setTokenRoyalty
function setTokenRoyalty(uint256 tokenId, address receiver, uint256 royaltyAmount) public
Record the asset royalties
Parameters
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)
_msgSender
function _msgSender() internal view virtual returns (address ret)
_msgData
function _msgData() internal view virtual returns (bytes ret)
_beforeTokenTransfer
function _beforeTokenTransfer(address from, address to, uint256, uint256 batchSize) internal virtual
It protects NFT transfers to force going through service agreements and enforce royalties
nftType
function nftType() external pure virtual returns (bytes32)
POAPUpgradeable
_tokenEvent
mapping(uint256 => uint256) _tokenEvent
nftType
bytes32 nftType
initialize
function initialize(address owner, address didRegistryAddress, string name, string symbol, string uri, uint256 cap, address nvmConfig_) public
mint
function mint(address to, uint256 tokenId, uint256 eventId) public virtual
mint
function mint(address to, uint256 eventId) public virtual
mint
function mint(address to) public virtual
mintBatch
function mintBatch(address[] to, uint256[] tokenIds, uint256[] eventIds) public virtual
burnBatch
function burnBatch(uint256[] tokenIds) public virtual
tokenEvent
function tokenEvent(uint256 tokenId) public view returns (uint256)
_burn
function _burn(uint256 tokenId) internal
_Destroys tokenId
.
The approval is cleared when the token is burned.
This is an internal function that does not check if the sender is authorized to operate on the token.
Requirements:
tokenId
must exist.
Emits a {Transfer} event._
tokenDetailsOfOwner
function tokenDetailsOfOwner(address owner) public view returns (uint256[] tokenIds, uint256[] eventIds)
supportsInterface
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool)
isApprovedForAll
function isApprovedForAll(address account, address operator) public view virtual returns (bool)
_baseURI
function _baseURI() internal view returns (string)
tokenURI
function tokenURI(uint256 tokenId) public view virtual returns (string)
_beforeTokenTransfer
function _beforeTokenTransfer(address from, address to, uint256 firstTokenId, uint256 tokenId) internal
_msgSender
function _msgSender() internal view virtual returns (address ret)
_msgData
function _msgData() internal view virtual returns (bytes ret)
SoulBoundUpgradeable
nftType
bytes32 nftType
initialize
function initialize(address owner, address didRegistryAddress, string name, string symbol, string uri, uint256 cap, address nvmConfig_) public
_beforeTokenTransfer
function _beforeTokenTransfer(address, address, uint256, uint256) internal virtual
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)