Compare commits
14 Commits
Author | SHA1 | Date |
---|---|---|
lash | b1c03932ad | |
lash | db35d389ec | |
lash | b9a29b7827 | |
lash | 48d69ce74c | |
lash | 9df26634fd | |
lash | da5d7d9d2d | |
lash | f9d2af2e3b | |
lash | e3d0704d4f | |
lash | 80671fdfaa | |
lash | 0fba11aeaf | |
lash | a7cc695045 | |
lash | 64e8df2573 | |
lash | 45ca79cf46 | |
lash | fe4f1c2c41 |
5
Makefile
5
Makefile
|
@ -45,7 +45,10 @@ readme:
|
|||
pandoc -f docbook -t gfm doc/texinfo/build/docbook.xml > README.md
|
||||
cp -v README.md python/README.md
|
||||
|
||||
python:
|
||||
python: outs
|
||||
mkdir -vp python/cic_contracts/data
|
||||
cp -v solidity/*.interface python/cic_contracts/data
|
||||
cp -v solidity/*.json python/cic_contracts/data
|
||||
make -C python
|
||||
|
||||
.PHONY: clean install
|
||||
|
|
383
README.md
383
README.md
|
@ -47,6 +47,27 @@ in CIC native interfaces.
|
|||
|
||||
## Native interfaces
|
||||
|
||||
### ACL
|
||||
|
||||
A simple Access Control List definition that returns true of false
|
||||
depending on whether an signatory (address) is allowed to operate in a
|
||||
given context.
|
||||
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
3ef25013
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IACL {
|
||||
// Returns true if the address has permission to operate in the given context.
|
||||
function have(address _address) external view returns(bool);
|
||||
}
|
||||
|
||||
#### Example implementation
|
||||
|
||||
<git://holbrook.no/eth-accounts-index.git>
|
||||
|
||||
### Accounts Index
|
||||
|
||||
Append-only list of addresses. Typically used for access control lists.
|
||||
|
@ -61,10 +82,12 @@ matching `address(0x00)` should be skipped, and not counted towards
|
|||
|
||||
May optionally record time when account was added.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
b7bca625
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IAccountsIndex {
|
||||
// Address added to store, index in array.
|
||||
event AddressAdded(uint256 indexed _idx, address _account);
|
||||
|
@ -81,6 +104,7 @@ Solidity interface definition
|
|||
function add(address) external returns (bool);
|
||||
|
||||
// Verify that the entry exists in the index.
|
||||
// Implements ACL
|
||||
function have(address) external view returns (bool);
|
||||
|
||||
// Retrieve the timestamp when account was added.
|
||||
|
@ -88,7 +112,8 @@ Solidity interface definition
|
|||
function time(address) external view returns (uint256);
|
||||
}
|
||||
|
||||
Reference implementation
|
||||
#### Reference implementation
|
||||
|
||||
<git://holbrook.no/eth-accounts-index.git> (v0.5.1)
|
||||
|
||||
### Accounts Index Mutable
|
||||
|
@ -99,10 +124,12 @@ address list.
|
|||
Addresses may be *added*, *removed*, aswell as *deactivated* and
|
||||
*activated*. Deactivated accounts still count towards the `entryCount`.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
9479f0ae
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IAccountsIndexMutable {
|
||||
// Active status of address changed, and by whom changed.
|
||||
event AddressActive(address indexed _account, bool _active);
|
||||
|
@ -123,7 +150,8 @@ Solidity interface definition
|
|||
function isActive(address) external view returns (bool);
|
||||
}
|
||||
|
||||
Reference implementation
|
||||
#### Reference implementation
|
||||
|
||||
<git://holbrook.no/eth-accounts-index.git> (v0.5.1)
|
||||
|
||||
### Burner
|
||||
|
@ -132,10 +160,12 @@ Attached to `ERC20` and `ERC721` tokens that may be *burned*.
|
|||
|
||||
Implements the `burn(...)` part of `ERC5679` for interoperability.
|
||||
|
||||
ERC165 Interface identifier
|
||||
bc4babdd
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
b1110c1b
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
Solidity interface definition
|
||||
interface IBurner {
|
||||
// Token(s) successfully burned; by who and how much.
|
||||
event Burn(address indexed _burner, uint256 _burned);
|
||||
|
@ -144,10 +174,11 @@ Solidity interface definition
|
|||
function burn(address _from, uint256 _amount, bytes calldata _data) external;
|
||||
|
||||
// Burn given amount of tokens held by signer.
|
||||
function burn(uint256 _burn) external returns (bool);
|
||||
function burn(uint256 _amount) external returns (bool);
|
||||
|
||||
// Burn all tokens held by signer.
|
||||
function burn() external returns (bool);
|
||||
// Returns the amount of tokens burned.
|
||||
function burn() external returns (uint256);
|
||||
|
||||
// Total amount of tokens that have been burned.
|
||||
function totalBurned() external returns (uint256);
|
||||
|
@ -157,7 +188,8 @@ Solidity interface definition
|
|||
function totalMinted() external returns (uint256);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
||||
### Chrono
|
||||
|
@ -166,17 +198,20 @@ Define a creation time for a resource.
|
|||
|
||||
Complements `ERC5007`.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
4db1ccd4
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IChrono {
|
||||
// Returns the timestamp of when a resource corresponding to _idx was first created.
|
||||
// int64 chosen as return value for simpler interoperability with ERC5007.
|
||||
function createTime(uint256 _idx) external returns(int64);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<https://git.defalsify.org/eth-erc721> (BadgeToken contract)
|
||||
|
||||
### Declarator
|
||||
|
@ -196,10 +231,12 @@ Any number of claims can be made about an address under any number of
|
|||
topics. All claims must be stored, and returned in the order which they
|
||||
were added.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
21b7493b
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IDeclarator {
|
||||
event DeclarationAdded(address indexed _declarator, address indexed _subject, bytes32 indexed _topic, bytes32 _proof);
|
||||
|
||||
|
@ -228,7 +265,8 @@ Solidity interface definition
|
|||
function declaratorCount(address _subject) external view returns ( uint256 );
|
||||
}
|
||||
|
||||
Reference implementation
|
||||
#### Reference implementation
|
||||
|
||||
<git://holbrook.no/eth-address-index.git>
|
||||
|
||||
### Digest
|
||||
|
@ -241,10 +279,12 @@ Primary use-case is the abstraction of self-describing
|
|||
A default encoding *must* always be defined, and the encoding of a valid
|
||||
digest *must* succeed with the default encoding.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
982ab05d
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IDigest {
|
||||
// Returns the default digest encoding used by the contract instance.
|
||||
function defaultDigestEncoding() external view returns (uint256 _encoding);
|
||||
|
@ -263,21 +303,24 @@ Solidity interface definition
|
|||
function encodeDigest(bytes memory _data) external view returns (bytes memory);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<git://holbrook.no/eth-event-msg.git>
|
||||
|
||||
### Expire
|
||||
|
||||
Defines an expiry time after which token balances or supply *cannot
|
||||
Defines an expiry time after which token balances and supply *cannot
|
||||
change*.
|
||||
|
||||
A contract defining an expiry *must not* allow changing the expiration
|
||||
time to a time in the past.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
841a0e94
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IExpire {
|
||||
// Contract has expired.
|
||||
event Expired(uint256 _timestamp);
|
||||
|
@ -296,7 +339,8 @@ Solidity interface definition
|
|||
function applyExpiry() external returns(uint8);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
||||
### Faucet
|
||||
|
@ -331,10 +375,12 @@ amount to dispense.
|
|||
The *check(address)* contract call *must* evaluate all four criteria,
|
||||
and *must* return `false` if any of the criteria are not met.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
1a3ac634
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IFaucet {
|
||||
// Tokens were given to an address
|
||||
event Give(address indexed _recipient, address indexed _token, uint256 _value);
|
||||
|
@ -369,7 +415,8 @@ Solidity interface definition
|
|||
function nextBalance(address _recipient) external returns (uint256);
|
||||
}
|
||||
|
||||
Reference implementations
|
||||
#### Reference implementations
|
||||
|
||||
- <git://holbrook.no/erc20-faucet.git>
|
||||
|
||||
- <git://holbrook.no/eth-faucet.git>
|
||||
|
@ -388,10 +435,12 @@ the content address.
|
|||
Furthermore, it *should* be possible to refer to a resource by a
|
||||
fully-qualified location on the web or an overlay network (e.g. tor).
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
ed75b333
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface ILocator {
|
||||
// URI that may or may not point to a specific resource location.
|
||||
function toURI(bytes memory _data) external view returns (string memory);
|
||||
|
@ -400,10 +449,11 @@ Solidity interface definition
|
|||
function toURL(bytes memory _data) external view returns(string memory);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<git://holbrook.no/eth-event-msg.git>
|
||||
|
||||
#### Expressing locators in terms of numetic token id
|
||||
#### Expressing locators in terms of numeric token id
|
||||
|
||||
Given the numeric token id `1234567890987654321` (`0x112210f4b16c1cb1`
|
||||
hex), and a base url `https://contentgateway.grassecon.net`, the result
|
||||
|
@ -462,14 +512,19 @@ Attached to `ERC20` and `ERC721` tokens that may be minted.
|
|||
Implements the `mint(...)` and `safeMint(...)` parts of `ERC5679` for
|
||||
interoperability.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
5878bcf4
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IMinter {
|
||||
// Tokens are successfully minted; by who, to whom and how much
|
||||
event Mint(address indexed _minter, address indexed _beneficiary, uint256 value);
|
||||
|
||||
// The given token has been successfully minted; by who, to whom and how much
|
||||
event Mint(address indexed _minter, address indexed _beneficiary, address indexed _token, uint256 value);
|
||||
|
||||
// Mint the specified value of tokens to the specified recipient
|
||||
function mintTo(address _beneficiary, uint256 value) external returns (bool);
|
||||
|
||||
|
@ -480,7 +535,8 @@ Solidity interface definition
|
|||
function safeMint(address _beneficiary, uint256 value, bytes calldata _data) external;
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
||||
### Msg
|
||||
|
@ -493,10 +549,12 @@ The reference may or may not be mutable.
|
|||
The interface complements `Locator` and `MultiHash` to generate locators
|
||||
for how to resolve the reference.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
a3002595
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IMsg {
|
||||
// Emitted when a new message digest has been set
|
||||
// Should not be emitted if the digest set is identical to the previous
|
||||
|
@ -506,7 +564,8 @@ Solidity interface definition
|
|||
function getMsg() external view returns(bytes memory);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<git://holbrook.no/eth-event-msg.git>
|
||||
|
||||
### Registry
|
||||
|
@ -520,10 +579,12 @@ It currently has two distinct uses in the CIC context:
|
|||
|
||||
2. Unique (ERC20) token symbol resolver.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
effbf671
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IRegistryClient {
|
||||
// Address added to store with the given key
|
||||
event AddressKey(bytes32 indexed _key, address _address);
|
||||
|
@ -538,10 +599,12 @@ Solidity interface definition
|
|||
function identifierCount() external view returns (uint256);
|
||||
}
|
||||
|
||||
Contract registry implementation
|
||||
#### Contract registry implementation
|
||||
|
||||
<git://holbrook.no/eth-contract-registry.git>
|
||||
|
||||
Token index implementation
|
||||
#### Token index implementation
|
||||
|
||||
<git://holbrook.no/eth-contract-registry.git>
|
||||
|
||||
### Seal
|
||||
|
@ -570,10 +633,12 @@ Use cases of sealing include:
|
|||
|
||||
- The expiry time of a token (see `Expire`)
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
0d7491f8
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface ISeal {
|
||||
// Seal state has changed.
|
||||
event SealStateChange(bool indexed _final, uint256 _sealState);
|
||||
|
@ -585,40 +650,202 @@ Solidity interface definition
|
|||
function maxSealState() external view returns(uint256);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
||||
### TokenVend
|
||||
### Throttle
|
||||
|
||||
This interface defines the mechanism for which a specific ERC20 token
|
||||
may be exchanged for a different ERC20 token.
|
||||
An backend contract to limit access to a resource by time.
|
||||
|
||||
A typical use-case is generation of voting tokens based on a momentary
|
||||
voucher balance. This is especially useful if the original ERC20 token
|
||||
is subject to decay (demurrage).
|
||||
The smart contract managing the resource calls ‘have(address)‘ on this
|
||||
contract to check if it can be made use of at the current point in time.
|
||||
This also implements [ACL](#acl).
|
||||
|
||||
The tokens used for exchange **SHOULD** be locked for the full duration
|
||||
of holding the vended tokens.
|
||||
When the resource is made use of, it calls ‘poke(address)‘ method to
|
||||
register when it has been made use of.
|
||||
|
||||
The withdrawal function may or may not allow partial withdrawals.
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
ERC165 Interface identifier
|
||||
8a13249c
|
||||
8f5bc7bf
|
||||
|
||||
Solidity interface definition
|
||||
interface ITokenVend {
|
||||
// A new vended token has been created.
|
||||
event TokenCreated(uint256 indexed _tokenIdx, uint256 indexed _supply, address _token);
|
||||
#### Solidity interface definition
|
||||
|
||||
// Create corresponding vended tokens for the control token balance of the caller.
|
||||
function getFor(address _token) external returns (uint256);
|
||||
interface IThrottle {
|
||||
// Returns true if the given address is authorized to make use of the resource at the current moment.
|
||||
// Implements ACL
|
||||
function have(address _address) external view returns(bool);
|
||||
|
||||
// Recover control tokens that were used to retrieve the corresponding vended tokens.
|
||||
function withdrawFor(address _token) external returns (uint256);
|
||||
// Must be called when the resource is being used.
|
||||
function poke(address _address) external returns(bool);
|
||||
}
|
||||
|
||||
Reference implementations
|
||||
- <git://holbrook.no/erc20-vend.git>
|
||||
#### Reference implementation
|
||||
|
||||
<git://holbrook.no/eth-faucet.git> (PeriodSimple contract)
|
||||
|
||||
### TokenLimit
|
||||
|
||||
Define limits of value amounts of tokens that individual addresses can
|
||||
hold.
|
||||
|
||||
Limits are inclusive; a limit for 42 means transfer resulting in a token
|
||||
balance *higher* than 42 should be rejected.
|
||||
|
||||
A return value of 0 indicates that the token is categorically not
|
||||
accepted by the holder.
|
||||
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
23778613
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
interface ITokenLimit {
|
||||
// Returns limit of total value a holder will accept of a specific token.
|
||||
// The value limit returned is inclusive; A limit of 42 means any operation resulting in a balance OVER 42 should be rejected.
|
||||
// A value of 0 means that no value of the token is accepted.
|
||||
function limitOf(address _token, address _holder) external view returns(uint256);
|
||||
}
|
||||
|
||||
#### Reference implementations
|
||||
|
||||
- <git://holbrook.no/erc20-limiter.git>
|
||||
|
||||
### TokenQuote
|
||||
|
||||
Quote an output token value for a given value of input tokens.
|
||||
|
||||
Both input and output value is denominated in the smallest available
|
||||
unit of respective tokens.
|
||||
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
dbb21d40
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
interface ITokenQuote {
|
||||
// Returns, within a current context, what value of outTokens the given value of inTokens translates to.
|
||||
// The values are given in smallest unit of each respective token.
|
||||
function valueFor(address _outToken, address _inToken, uint256 value) external view returns (uint256);
|
||||
}
|
||||
|
||||
#### Example implementation
|
||||
|
||||
- <git://holbrook.no/erc20-limiter.git>
|
||||
|
||||
### TokenRateChange
|
||||
|
||||
Enables detection of properties for CIC tokens that change value over
|
||||
time, e.g. through demurrage.
|
||||
|
||||
It allows defining the granularity of the rate of change, aswell as a
|
||||
frequency for which the rate of change is applied.
|
||||
|
||||
A method for canonical value change calculations is also provided.
|
||||
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
b716af03
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
interface ITokenChangeRate {
|
||||
// Time unit resolution for rate of change.
|
||||
// A value of 0 indicates no rate of change,
|
||||
function changeTimeUnit() external view returns(uint256);
|
||||
|
||||
// Rate of change per changeTimeUnit(), signed integer.
|
||||
// An effective value of 0 indicates no rate of change.
|
||||
function changeRate() external view returns (int256);
|
||||
|
||||
// Number of decimals with which the changeRate is defined.
|
||||
// changeRate() should be divided by 10 ** changeRateDecimals() to obtain effective value
|
||||
function changeRateDecimals() external view returns(uint8);
|
||||
|
||||
// Timestamp from when rate of change should be applied.
|
||||
// A value of 0 indicates no rate of change,
|
||||
function changeStartTime() external view returns(uint256);
|
||||
|
||||
// Calculate value with change rate applied for given amount of time units.
|
||||
// Will calculate compounded change over the given amount of time units
|
||||
function applyChange(int256 _value, uint256 _changeTimeUnits) external view returns(int256);
|
||||
}
|
||||
|
||||
#### Reference implementations
|
||||
|
||||
- <git://holbrook.no/erc20-demurrage-token.git>
|
||||
|
||||
### TokenSwap
|
||||
|
||||
Token swap interface that can fit token escrow purposes aswell as token
|
||||
swap contracts.
|
||||
|
||||
Optionally may define a `defaultToken`, that may among other things be
|
||||
used for `withdraw()` calls without an `inToken`.
|
||||
|
||||
An explicit *ERC20 approval* of the balance to be transacted will
|
||||
usually be required for the implementing contract.
|
||||
|
||||
If the value 0 is passed as argument to `deposit` or `withdraw`,
|
||||
implementers can choose one of two possible outcomes:
|
||||
|
||||
- Noop. 0 *must* be returned.
|
||||
|
||||
- Use *balance* or the max available *allowance*. The actual (spent)
|
||||
value *must* be returned.
|
||||
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
4146b765
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
interface ITokenSwap {
|
||||
// Emitted when a new deposit has been made.
|
||||
event Deposit(address indexed _token, uint256 _value);
|
||||
|
||||
// Default token used to access the token swap.
|
||||
// Returns zero-address if no default token is defined.
|
||||
function defaultToken() external returns (address);
|
||||
|
||||
// Add inToken liquidity to the tune of given value.
|
||||
// Requires token approval for the corresponding value.
|
||||
// If value is 0, up to the full approval MAY be used for the transfer.
|
||||
function deposit(address _inToken, uint256 _value) external returns (uint256);
|
||||
|
||||
// Withdraw pending outToken balance of given value in the pool for the sender.
|
||||
// May require token approval for defaultToken if used by contract as exchange for the withdrawal.
|
||||
// If value is 0, up to the full approval value MAY be used for the transfer.
|
||||
function withdraw(address _outToken, uint256 _value) external returns (uint256);
|
||||
|
||||
// Exchange inToken equalling given value for outToken.
|
||||
// Requires token approval for the value of inToken.
|
||||
// If value is 0, up to the full approval value MAY be used for the transfer.
|
||||
function withdraw(address _outToken, address _inToken, uint256 _value) external returns (uint256);
|
||||
}
|
||||
|
||||
#### Reference implementations
|
||||
|
||||
- <git://holbrook.no/erc20-pool.git>
|
||||
|
||||
#### Handling deposits
|
||||
|
||||
The implementation is free to decide whether deposits can be recovered
|
||||
directly, or if they will be locked in the smart contract - temporarily
|
||||
or permanently.
|
||||
|
||||
For the duration deposits are locked, they are part of the smart
|
||||
contract’s swap liquidity. During this time, locked deposits may only be
|
||||
withdrawn in exchange for other tokens accepted by the contract.
|
||||
|
||||
Deposits that are not locked should be withdrawable using the
|
||||
`withdraw(address,uint256)` (`0xf3fef3a3`) method signature.
|
||||
|
||||
Of course, as with most swap contracts, the tokens available for
|
||||
withdrawal by the holder may not necessarily match the tokens that were
|
||||
deposited by the holder.
|
||||
|
||||
### TokenVote
|
||||
|
||||
|
@ -632,10 +859,12 @@ Voted tokens **SHOULD** be locked until the voting has finalized.
|
|||
|
||||
Finalization of voting should be callable by anyone.
|
||||
|
||||
ERC165 Interface identifier
|
||||
28091366
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
f2e0bfeb
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
Solidity interface definition
|
||||
interface ITokenVote {
|
||||
|
||||
// A new proposal has been created.
|
||||
|
@ -655,8 +884,8 @@ Solidity interface definition
|
|||
// * _blockWait blocks from now.
|
||||
function propose(bytes32 _description, uint256 _blockWait, uint24 _targetVotePpm) external returns (uint256);
|
||||
|
||||
// Same as propose(...), but provide options to vote on.
|
||||
function proposeMulti(bytes32 _description, bytes32[] memory _options, uint256 _blockWait, uint24 _targetVotePpm) external returns (uint256);
|
||||
// Add a voting option to a proposal
|
||||
function addOption(uint256 _proposalIdx, bytes32 _description) external;
|
||||
|
||||
// Get number of options available for the proposal.
|
||||
// This decides the boundary of the index that can be used with voteOptions(...)
|
||||
|
@ -691,7 +920,8 @@ Solidity interface definition
|
|||
function finalize() external returns (bool);
|
||||
}
|
||||
|
||||
Reference implementations
|
||||
#### Reference implementations
|
||||
|
||||
- <git://holbrook.no/evm-tokenvote.git>
|
||||
|
||||
### Writer
|
||||
|
@ -716,10 +946,12 @@ Some use-case examples of super-user actions include:
|
|||
|
||||
- Edit access control lists.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
abe1f1f5
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IWriter {
|
||||
// A writer has been added by _executor
|
||||
event WriterAdded(address _writer);
|
||||
|
@ -737,5 +969,6 @@ Solidity interface definition
|
|||
function isWriter(address _writer) external view returns (bool);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
|
|
@ -9,14 +9,17 @@ The @code{entry} method is used to iterate the account list. The order of which
|
|||
May optionally record time when account was added.
|
||||
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/AccountsIndex.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_AccountsIndex.texi
|
||||
@item Reference implementation
|
||||
|
||||
@subsubsection Reference implementation
|
||||
|
||||
@uref{git://holbrook.no/eth-accounts-index.git,} (v0.5.1)
|
||||
@end table
|
||||
|
||||
|
||||
@subsection Accounts Index Mutable
|
||||
|
@ -26,11 +29,14 @@ Extends the functionality of @code{Accounts Index} to allow changes to the addre
|
|||
Addresses may be @emph{added}, @emph{removed}, aswell as @emph{deactivated} and @emph{activated}. Deactivated accounts still count towards the @code{entryCount}.
|
||||
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/AccountsIndexMutable.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_AccountsIndexMutable.texi
|
||||
@item Reference implementation
|
||||
|
||||
@subsubsection Reference implementation
|
||||
|
||||
@uref{git://holbrook.no/eth-accounts-index.git,} (v0.5.1)
|
||||
@end table
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
@anchor{acl}
|
||||
@subsection ACL
|
||||
|
||||
A simple Access Control List definition that returns true of false depending on whether an signatory (address) is allowed to operate in a given context.
|
||||
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/ACL.interface
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_ACL.texi
|
||||
|
||||
@subsubsection Example implementation
|
||||
|
||||
@uref{git://holbrook.no/eth-accounts-index.git,}
|
||||
|
||||
|
|
@ -4,11 +4,14 @@ Attached to @code{ERC20} and @code{ERC721} tokens that may be @emph{burned}.
|
|||
|
||||
Implements the @code{burn(...)} part of @code{ERC5679} for interoperability.
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/Burner.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_Burner.texi
|
||||
@item Example implementation
|
||||
|
||||
@subsubsection Example implementation
|
||||
|
||||
@uref{https://git.grassecon.net/cicnet/erc20-demurrage-token.git}
|
||||
@end table
|
||||
|
|
|
@ -5,11 +5,14 @@ Define a creation time for a resource.
|
|||
Complements @code{ERC5007}.
|
||||
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/Chrono.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_Chrono.texi
|
||||
@item Example implementation
|
||||
|
||||
@subsubsection Example implementation
|
||||
|
||||
@uref{https://git.defalsify.org/eth-erc721} (BadgeToken contract)
|
||||
@end table
|
||||
|
|
|
@ -10,11 +10,14 @@ Claims may be made with or without topics. A missing topic is synonymous with a
|
|||
|
||||
Any number of claims can be made about an address under any number of topics. All claims must be stored, and returned in the order which they were added.
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/Declarator.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_Declarator.texi
|
||||
@item Reference implementation
|
||||
|
||||
@subsubsection Reference implementation
|
||||
|
||||
@uref{git://holbrook.no/eth-address-index.git,}
|
||||
@end table
|
||||
|
|
|
@ -7,11 +7,14 @@ Primary use-case is the abstraction of self-describing @uref{https://multiformat
|
|||
A default encoding @emph{must} always be defined, and the encoding of a valid digest @emph{must} succeed with the default encoding.
|
||||
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/Digest.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_Digest.texi
|
||||
@item Example implementation
|
||||
|
||||
@subsubsection Example implementation
|
||||
|
||||
@uref{git://holbrook.no/eth-event-msg.git}
|
||||
@end table
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
@subsection Expire
|
||||
|
||||
Defines an expiry time after which token balances or supply @emph{cannot change}.
|
||||
Defines an expiry time after which token balances and supply @emph{cannot change}.
|
||||
|
||||
A contract defining an expiry @emph{must not} allow changing the expiration time to a time in the past.
|
||||
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/Expire.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_Expire.texi
|
||||
@item Example implementation
|
||||
|
||||
@subsubsection Example implementation
|
||||
|
||||
@uref{https://git.grassecon.net/cicnet/erc20-demurrage-token.git}
|
||||
@end table
|
||||
|
|
|
@ -24,16 +24,19 @@ The contract has sufficient token funds to dispense the current defined amount t
|
|||
The @emph{check(address)} contract call @emph{must} evaluate all four criteria, and @emph{must} return @code{false} if any of the criteria are not met.
|
||||
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/Faucet.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_Faucet.texi
|
||||
@item Reference implementations
|
||||
|
||||
@subsubsection Reference implementations
|
||||
|
||||
@itemize
|
||||
@item
|
||||
@uref{git://holbrook.no/erc20-faucet.git,}
|
||||
@item
|
||||
@uref{git://holbrook.no/eth-faucet.git,}
|
||||
@end itemize
|
||||
@end table
|
||||
|
|
|
@ -8,17 +8,20 @@ It @emph{must} be possible to refer to all off-chain resources directly by the c
|
|||
|
||||
Furthermore, it @emph{should} be possible to refer to a resource by a fully-qualified location on the web or an overlay network (e.g. tor).
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/Locator.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_Locator.texi
|
||||
@item Example implementation
|
||||
|
||||
@subsubsection Example implementation
|
||||
|
||||
@uref{git://holbrook.no/eth-event-msg.git}
|
||||
@end table
|
||||
|
||||
|
||||
@subsubsection Expressing locators in terms of numetic token id
|
||||
@subsubsection Expressing locators in terms of numeric token id
|
||||
|
||||
Given the numeric token id @code{1234567890987654321} (@code{0x112210f4b16c1cb1} hex), and a base url @code{https://contentgateway.grassecon.net}, the result of the methods may be as follows:
|
||||
|
||||
|
|
|
@ -4,11 +4,14 @@ Attached to @code{ERC20} and @code{ERC721} tokens that may be minted.
|
|||
|
||||
Implements the @code{mint(...)} and @code{safeMint(...)} parts of @code{ERC5679} for interoperability.
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/Minter.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_Minter.texi
|
||||
@item Example implementation
|
||||
|
||||
@subsubsection Example implementation
|
||||
|
||||
@uref{https://git.grassecon.net/cicnet/erc20-demurrage-token.git}
|
||||
@end table
|
||||
|
|
|
@ -7,11 +7,14 @@ The reference may or may not be mutable.
|
|||
The interface complements @code{Locator} and @code{MultiHash} to generate locators for how to resolve the reference.
|
||||
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/Msg.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_Msg.texi
|
||||
@item Example implementation
|
||||
|
||||
@subsubsection Example implementation
|
||||
|
||||
@uref{git://holbrook.no/eth-event-msg.git}
|
||||
@end table
|
||||
|
|
|
@ -50,6 +50,8 @@ The following well-known solidity interfaces are partially implemented in CIC na
|
|||
|
||||
@section Native interfaces
|
||||
|
||||
@include acl.sol.texi
|
||||
|
||||
@include accountsindex.sol.texi
|
||||
|
||||
@include burner.sol.texi
|
||||
|
@ -74,7 +76,15 @@ The following well-known solidity interfaces are partially implemented in CIC na
|
|||
|
||||
@include seal.sol.texi
|
||||
|
||||
@include tokenvend.sol.texi
|
||||
@include throttle.sol.texi
|
||||
|
||||
@include tokenlimit.sol.texi
|
||||
|
||||
@include tokenquote.sol.texi
|
||||
|
||||
@include tokenratechange.sol.texi
|
||||
|
||||
@include tokenswap.sol.texi
|
||||
|
||||
@include tokenvote.sol.texi
|
||||
|
||||
|
|
|
@ -11,13 +11,18 @@ Entry-point to discover all relevant contracts of CIC networks.
|
|||
Unique (ERC20) token symbol resolver.
|
||||
@end enumerate
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/RegistryClient.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_RegistryClient.texi
|
||||
@item Contract registry implementation
|
||||
|
||||
@subsubsection Contract registry implementation
|
||||
|
||||
@uref{git://holbrook.no/eth-contract-registry.git,}
|
||||
@item Token index implementation
|
||||
|
||||
@subsubsection Token index implementation
|
||||
|
||||
@uref{git://holbrook.no/eth-contract-registry.git,}
|
||||
@end table
|
||||
|
|
|
@ -21,11 +21,14 @@ Allow ownership of a contract to be transferred
|
|||
The expiry time of a token (see @code{Expire})
|
||||
@end itemize
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/Seal.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_Seal.texi
|
||||
@item Example implementation
|
||||
|
||||
@subsubsection Example implementation
|
||||
|
||||
@uref{https://git.grassecon.net/cicnet/erc20-demurrage-token.git}
|
||||
@end table
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
@subsection Throttle
|
||||
|
||||
An backend contract to limit access to a resource by time.
|
||||
|
||||
The smart contract managing the resource calls `have(address)` on this contract to check if it can be made use of at the current point in time. This also implements @ref{acl, ACL}.
|
||||
|
||||
When the resource is made use of, it calls `poke(address)` method to register when it has been made use of.
|
||||
|
||||
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/Throttle.interface
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_Throttle.texi
|
||||
|
||||
@subsubsection Reference implementation
|
||||
|
||||
@uref{git://holbrook.no/eth-faucet.git,} (PeriodSimple contract)
|
|
@ -0,0 +1,22 @@
|
|||
@subsection TokenLimit
|
||||
|
||||
Define limits of value amounts of tokens that individual addresses can hold.
|
||||
|
||||
Limits are inclusive; a limit for 42 means transfer resulting in a token balance @emph{higher} than 42 should be rejected.
|
||||
|
||||
A return value of 0 indicates that the token is categorically not accepted by the holder.
|
||||
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/TokenLimit.interface
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_TokenLimit.texi
|
||||
|
||||
@subsubsection Reference implementations
|
||||
|
||||
@itemize
|
||||
@item
|
||||
@uref{git://holbrook.no/erc20-limiter.git,}
|
||||
@end itemize
|
|
@ -0,0 +1,20 @@
|
|||
@subsection TokenQuote
|
||||
|
||||
Quote an output token value for a given value of input tokens.
|
||||
|
||||
Both input and output value is denominated in the smallest available unit of respective tokens.
|
||||
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/TokenQuote.interface
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_TokenQuote.texi
|
||||
|
||||
@subsubsection Example implementation
|
||||
|
||||
@itemize
|
||||
@item
|
||||
@uref{git://holbrook.no/erc20-limiter.git,}
|
||||
@end itemize
|
|
@ -0,0 +1,22 @@
|
|||
@subsection TokenRateChange
|
||||
|
||||
Enables detection of properties for CIC tokens that change value over time, e.g. through demurrage.
|
||||
|
||||
It allows defining the granularity of the rate of change, aswell as a frequency for which the rate of change is applied.
|
||||
|
||||
A method for canonical value change calculations is also provided.
|
||||
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/TokenRateChange.interface
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_TokenRateChange.texi
|
||||
|
||||
@subsubsection Reference implementations
|
||||
|
||||
@itemize
|
||||
@item
|
||||
@uref{git://holbrook.no/erc20-demurrage-token.git,}
|
||||
@end itemize
|
|
@ -0,0 +1,40 @@
|
|||
@subsection TokenSwap
|
||||
|
||||
Token swap interface that can fit token escrow purposes aswell as token swap contracts.
|
||||
|
||||
Optionally may define a @code{defaultToken}, that may among other things be used for @code{withdraw()} calls without an @code{inToken}.
|
||||
|
||||
An explicit @emph{ERC20 approval} of the balance to be transacted will usually be required for the implementing contract.
|
||||
|
||||
If the value 0 is passed as argument to @code{deposit} or @code{withdraw}, implementers can choose one of two possible outcomes:
|
||||
|
||||
@itemize
|
||||
@item Noop. 0 @emph{must} be returned.
|
||||
@item Use @emph{balance} or the max available @emph{allowance}. The actual (spent) value @emph{must} be returned.
|
||||
@end itemize
|
||||
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/TokenSwap.interface
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_TokenSwap.texi
|
||||
|
||||
@subsubsection Reference implementations
|
||||
|
||||
@itemize
|
||||
@item
|
||||
@uref{git://holbrook.no/erc20-pool.git,}
|
||||
@end itemize
|
||||
|
||||
|
||||
@subsubsection Handling deposits
|
||||
|
||||
The implementation is free to decide whether deposits can be recovered directly, or if they will be locked in the smart contract - temporarily or permanently.
|
||||
|
||||
For the duration deposits are locked, they are part of the smart contract's swap liquidity. During this time, locked deposits may only be withdrawn in exchange for other tokens accepted by the contract.
|
||||
|
||||
Deposits that are not locked should be withdrawable using the @code{withdraw(address,uint256)} (@code{0xf3fef3a3}) method signature.
|
||||
|
||||
Of course, as with most swap contracts, the tokens available for withdrawal by the holder may not necessarily match the tokens that were deposited by the holder.
|
|
@ -10,14 +10,16 @@ Voted tokens @strong{SHOULD} be locked until the voting has finalized.
|
|||
Finalization of voting should be callable by anyone.
|
||||
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/TokenVote.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_TokenVote.texi
|
||||
@item Reference implementations
|
||||
|
||||
@subsubsection Reference implementations
|
||||
@itemize
|
||||
@item
|
||||
@uref{git://holbrook.no/evm-tokenvote.git,}
|
||||
@end itemize
|
||||
@end table
|
||||
|
|
|
@ -19,11 +19,14 @@ Change the amount dispensed by the faucet.
|
|||
Edit access control lists.
|
||||
@end itemize
|
||||
|
||||
@table @dfn
|
||||
@item ERC165 Interface identifier
|
||||
@subsubsection ERC165 Interface identifier
|
||||
|
||||
@include ../../build/Writer.interface
|
||||
@item Solidity interface definition
|
||||
|
||||
@subsubsection Solidity interface definition
|
||||
|
||||
@include ../../build/contract_Writer.texi
|
||||
@item Example implementation
|
||||
|
||||
@subsubsection Example implementation
|
||||
|
||||
@uref{https://git.grassecon.net/cicnet/erc20-demurrage-token.git}
|
||||
@end table
|
||||
|
|
|
@ -1 +1 @@
|
|||
include *requirements.txt solidity/* LICENSE README* cic_contracts/unittest/solidity/*
|
||||
include *requirements.txt solidity/* LICENSE README* cic_contracts/unittest/solidity/* cic_contracts/data/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
INPUTS = $(wildcard solidity/*.sol)
|
||||
INPUTS = $(wildcard cic_contracts/unittest/solidity/*.sol)
|
||||
OUTPUTS = $(patsubst %.sol, %.bin, $(INPUTS))
|
||||
|
||||
all: outs readme package
|
||||
all: outs package
|
||||
|
||||
.SUFFIXES: .sol .bin
|
||||
|
||||
|
|
383
python/README.md
383
python/README.md
|
@ -47,6 +47,27 @@ in CIC native interfaces.
|
|||
|
||||
## Native interfaces
|
||||
|
||||
### ACL
|
||||
|
||||
A simple Access Control List definition that returns true of false
|
||||
depending on whether an signatory (address) is allowed to operate in a
|
||||
given context.
|
||||
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
3ef25013
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IACL {
|
||||
// Returns true if the address has permission to operate in the given context.
|
||||
function have(address _address) external view returns(bool);
|
||||
}
|
||||
|
||||
#### Example implementation
|
||||
|
||||
<git://holbrook.no/eth-accounts-index.git>
|
||||
|
||||
### Accounts Index
|
||||
|
||||
Append-only list of addresses. Typically used for access control lists.
|
||||
|
@ -61,10 +82,12 @@ matching `address(0x00)` should be skipped, and not counted towards
|
|||
|
||||
May optionally record time when account was added.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
b7bca625
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IAccountsIndex {
|
||||
// Address added to store, index in array.
|
||||
event AddressAdded(uint256 indexed _idx, address _account);
|
||||
|
@ -81,6 +104,7 @@ Solidity interface definition
|
|||
function add(address) external returns (bool);
|
||||
|
||||
// Verify that the entry exists in the index.
|
||||
// Implements ACL
|
||||
function have(address) external view returns (bool);
|
||||
|
||||
// Retrieve the timestamp when account was added.
|
||||
|
@ -88,7 +112,8 @@ Solidity interface definition
|
|||
function time(address) external view returns (uint256);
|
||||
}
|
||||
|
||||
Reference implementation
|
||||
#### Reference implementation
|
||||
|
||||
<git://holbrook.no/eth-accounts-index.git> (v0.5.1)
|
||||
|
||||
### Accounts Index Mutable
|
||||
|
@ -99,10 +124,12 @@ address list.
|
|||
Addresses may be *added*, *removed*, aswell as *deactivated* and
|
||||
*activated*. Deactivated accounts still count towards the `entryCount`.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
9479f0ae
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IAccountsIndexMutable {
|
||||
// Active status of address changed, and by whom changed.
|
||||
event AddressActive(address indexed _account, bool _active);
|
||||
|
@ -123,7 +150,8 @@ Solidity interface definition
|
|||
function isActive(address) external view returns (bool);
|
||||
}
|
||||
|
||||
Reference implementation
|
||||
#### Reference implementation
|
||||
|
||||
<git://holbrook.no/eth-accounts-index.git> (v0.5.1)
|
||||
|
||||
### Burner
|
||||
|
@ -132,10 +160,12 @@ Attached to `ERC20` and `ERC721` tokens that may be *burned*.
|
|||
|
||||
Implements the `burn(...)` part of `ERC5679` for interoperability.
|
||||
|
||||
ERC165 Interface identifier
|
||||
bc4babdd
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
b1110c1b
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
Solidity interface definition
|
||||
interface IBurner {
|
||||
// Token(s) successfully burned; by who and how much.
|
||||
event Burn(address indexed _burner, uint256 _burned);
|
||||
|
@ -144,10 +174,11 @@ Solidity interface definition
|
|||
function burn(address _from, uint256 _amount, bytes calldata _data) external;
|
||||
|
||||
// Burn given amount of tokens held by signer.
|
||||
function burn(uint256 _burn) external returns (bool);
|
||||
function burn(uint256 _amount) external returns (bool);
|
||||
|
||||
// Burn all tokens held by signer.
|
||||
function burn() external returns (bool);
|
||||
// Returns the amount of tokens burned.
|
||||
function burn() external returns (uint256);
|
||||
|
||||
// Total amount of tokens that have been burned.
|
||||
function totalBurned() external returns (uint256);
|
||||
|
@ -157,7 +188,8 @@ Solidity interface definition
|
|||
function totalMinted() external returns (uint256);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
||||
### Chrono
|
||||
|
@ -166,17 +198,20 @@ Define a creation time for a resource.
|
|||
|
||||
Complements `ERC5007`.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
4db1ccd4
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IChrono {
|
||||
// Returns the timestamp of when a resource corresponding to _idx was first created.
|
||||
// int64 chosen as return value for simpler interoperability with ERC5007.
|
||||
function createTime(uint256 _idx) external returns(int64);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<https://git.defalsify.org/eth-erc721> (BadgeToken contract)
|
||||
|
||||
### Declarator
|
||||
|
@ -196,10 +231,12 @@ Any number of claims can be made about an address under any number of
|
|||
topics. All claims must be stored, and returned in the order which they
|
||||
were added.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
21b7493b
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IDeclarator {
|
||||
event DeclarationAdded(address indexed _declarator, address indexed _subject, bytes32 indexed _topic, bytes32 _proof);
|
||||
|
||||
|
@ -228,7 +265,8 @@ Solidity interface definition
|
|||
function declaratorCount(address _subject) external view returns ( uint256 );
|
||||
}
|
||||
|
||||
Reference implementation
|
||||
#### Reference implementation
|
||||
|
||||
<git://holbrook.no/eth-address-index.git>
|
||||
|
||||
### Digest
|
||||
|
@ -241,10 +279,12 @@ Primary use-case is the abstraction of self-describing
|
|||
A default encoding *must* always be defined, and the encoding of a valid
|
||||
digest *must* succeed with the default encoding.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
982ab05d
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IDigest {
|
||||
// Returns the default digest encoding used by the contract instance.
|
||||
function defaultDigestEncoding() external view returns (uint256 _encoding);
|
||||
|
@ -263,21 +303,24 @@ Solidity interface definition
|
|||
function encodeDigest(bytes memory _data) external view returns (bytes memory);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<git://holbrook.no/eth-event-msg.git>
|
||||
|
||||
### Expire
|
||||
|
||||
Defines an expiry time after which token balances or supply *cannot
|
||||
Defines an expiry time after which token balances and supply *cannot
|
||||
change*.
|
||||
|
||||
A contract defining an expiry *must not* allow changing the expiration
|
||||
time to a time in the past.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
841a0e94
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IExpire {
|
||||
// Contract has expired.
|
||||
event Expired(uint256 _timestamp);
|
||||
|
@ -296,7 +339,8 @@ Solidity interface definition
|
|||
function applyExpiry() external returns(uint8);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
||||
### Faucet
|
||||
|
@ -331,10 +375,12 @@ amount to dispense.
|
|||
The *check(address)* contract call *must* evaluate all four criteria,
|
||||
and *must* return `false` if any of the criteria are not met.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
1a3ac634
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IFaucet {
|
||||
// Tokens were given to an address
|
||||
event Give(address indexed _recipient, address indexed _token, uint256 _value);
|
||||
|
@ -369,7 +415,8 @@ Solidity interface definition
|
|||
function nextBalance(address _recipient) external returns (uint256);
|
||||
}
|
||||
|
||||
Reference implementations
|
||||
#### Reference implementations
|
||||
|
||||
- <git://holbrook.no/erc20-faucet.git>
|
||||
|
||||
- <git://holbrook.no/eth-faucet.git>
|
||||
|
@ -388,10 +435,12 @@ the content address.
|
|||
Furthermore, it *should* be possible to refer to a resource by a
|
||||
fully-qualified location on the web or an overlay network (e.g. tor).
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
ed75b333
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface ILocator {
|
||||
// URI that may or may not point to a specific resource location.
|
||||
function toURI(bytes memory _data) external view returns (string memory);
|
||||
|
@ -400,10 +449,11 @@ Solidity interface definition
|
|||
function toURL(bytes memory _data) external view returns(string memory);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<git://holbrook.no/eth-event-msg.git>
|
||||
|
||||
#### Expressing locators in terms of numetic token id
|
||||
#### Expressing locators in terms of numeric token id
|
||||
|
||||
Given the numeric token id `1234567890987654321` (`0x112210f4b16c1cb1`
|
||||
hex), and a base url `https://contentgateway.grassecon.net`, the result
|
||||
|
@ -462,14 +512,19 @@ Attached to `ERC20` and `ERC721` tokens that may be minted.
|
|||
Implements the `mint(...)` and `safeMint(...)` parts of `ERC5679` for
|
||||
interoperability.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
5878bcf4
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IMinter {
|
||||
// Tokens are successfully minted; by who, to whom and how much
|
||||
event Mint(address indexed _minter, address indexed _beneficiary, uint256 value);
|
||||
|
||||
// The given token has been successfully minted; by who, to whom and how much
|
||||
event Mint(address indexed _minter, address indexed _beneficiary, address indexed _token, uint256 value);
|
||||
|
||||
// Mint the specified value of tokens to the specified recipient
|
||||
function mintTo(address _beneficiary, uint256 value) external returns (bool);
|
||||
|
||||
|
@ -480,7 +535,8 @@ Solidity interface definition
|
|||
function safeMint(address _beneficiary, uint256 value, bytes calldata _data) external;
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
||||
### Msg
|
||||
|
@ -493,10 +549,12 @@ The reference may or may not be mutable.
|
|||
The interface complements `Locator` and `MultiHash` to generate locators
|
||||
for how to resolve the reference.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
a3002595
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IMsg {
|
||||
// Emitted when a new message digest has been set
|
||||
// Should not be emitted if the digest set is identical to the previous
|
||||
|
@ -506,7 +564,8 @@ Solidity interface definition
|
|||
function getMsg() external view returns(bytes memory);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<git://holbrook.no/eth-event-msg.git>
|
||||
|
||||
### Registry
|
||||
|
@ -520,10 +579,12 @@ It currently has two distinct uses in the CIC context:
|
|||
|
||||
2. Unique (ERC20) token symbol resolver.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
effbf671
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IRegistryClient {
|
||||
// Address added to store with the given key
|
||||
event AddressKey(bytes32 indexed _key, address _address);
|
||||
|
@ -538,10 +599,12 @@ Solidity interface definition
|
|||
function identifierCount() external view returns (uint256);
|
||||
}
|
||||
|
||||
Contract registry implementation
|
||||
#### Contract registry implementation
|
||||
|
||||
<git://holbrook.no/eth-contract-registry.git>
|
||||
|
||||
Token index implementation
|
||||
#### Token index implementation
|
||||
|
||||
<git://holbrook.no/eth-contract-registry.git>
|
||||
|
||||
### Seal
|
||||
|
@ -570,10 +633,12 @@ Use cases of sealing include:
|
|||
|
||||
- The expiry time of a token (see `Expire`)
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
0d7491f8
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface ISeal {
|
||||
// Seal state has changed.
|
||||
event SealStateChange(bool indexed _final, uint256 _sealState);
|
||||
|
@ -585,40 +650,202 @@ Solidity interface definition
|
|||
function maxSealState() external view returns(uint256);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
||||
### TokenVend
|
||||
### Throttle
|
||||
|
||||
This interface defines the mechanism for which a specific ERC20 token
|
||||
may be exchanged for a different ERC20 token.
|
||||
An backend contract to limit access to a resource by time.
|
||||
|
||||
A typical use-case is generation of voting tokens based on a momentary
|
||||
voucher balance. This is especially useful if the original ERC20 token
|
||||
is subject to decay (demurrage).
|
||||
The smart contract managing the resource calls ‘have(address)‘ on this
|
||||
contract to check if it can be made use of at the current point in time.
|
||||
This also implements [ACL](#acl).
|
||||
|
||||
The tokens used for exchange **SHOULD** be locked for the full duration
|
||||
of holding the vended tokens.
|
||||
When the resource is made use of, it calls ‘poke(address)‘ method to
|
||||
register when it has been made use of.
|
||||
|
||||
The withdrawal function may or may not allow partial withdrawals.
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
ERC165 Interface identifier
|
||||
8a13249c
|
||||
8f5bc7bf
|
||||
|
||||
Solidity interface definition
|
||||
interface ITokenVend {
|
||||
// A new vended token has been created.
|
||||
event TokenCreated(uint256 indexed _tokenIdx, uint256 indexed _supply, address _token);
|
||||
#### Solidity interface definition
|
||||
|
||||
// Create corresponding vended tokens for the control token balance of the caller.
|
||||
function getFor(address _token) external returns (uint256);
|
||||
interface IThrottle {
|
||||
// Returns true if the given address is authorized to make use of the resource at the current moment.
|
||||
// Implements ACL
|
||||
function have(address _address) external view returns(bool);
|
||||
|
||||
// Recover control tokens that were used to retrieve the corresponding vended tokens.
|
||||
function withdrawFor(address _token) external returns (uint256);
|
||||
// Must be called when the resource is being used.
|
||||
function poke(address _address) external returns(bool);
|
||||
}
|
||||
|
||||
Reference implementations
|
||||
- <git://holbrook.no/erc20-vend.git>
|
||||
#### Reference implementation
|
||||
|
||||
<git://holbrook.no/eth-faucet.git> (PeriodSimple contract)
|
||||
|
||||
### TokenLimit
|
||||
|
||||
Define limits of value amounts of tokens that individual addresses can
|
||||
hold.
|
||||
|
||||
Limits are inclusive; a limit for 42 means transfer resulting in a token
|
||||
balance *higher* than 42 should be rejected.
|
||||
|
||||
A return value of 0 indicates that the token is categorically not
|
||||
accepted by the holder.
|
||||
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
23778613
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
interface ITokenLimit {
|
||||
// Returns limit of total value a holder will accept of a specific token.
|
||||
// The value limit returned is inclusive; A limit of 42 means any operation resulting in a balance OVER 42 should be rejected.
|
||||
// A value of 0 means that no value of the token is accepted.
|
||||
function limitOf(address _token, address _holder) external view returns(uint256);
|
||||
}
|
||||
|
||||
#### Reference implementations
|
||||
|
||||
- <git://holbrook.no/erc20-limiter.git>
|
||||
|
||||
### TokenQuote
|
||||
|
||||
Quote an output token value for a given value of input tokens.
|
||||
|
||||
Both input and output value is denominated in the smallest available
|
||||
unit of respective tokens.
|
||||
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
dbb21d40
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
interface ITokenQuote {
|
||||
// Returns, within a current context, what value of outTokens the given value of inTokens translates to.
|
||||
// The values are given in smallest unit of each respective token.
|
||||
function valueFor(address _outToken, address _inToken, uint256 value) external view returns (uint256);
|
||||
}
|
||||
|
||||
#### Example implementation
|
||||
|
||||
- <git://holbrook.no/erc20-limiter.git>
|
||||
|
||||
### TokenRateChange
|
||||
|
||||
Enables detection of properties for CIC tokens that change value over
|
||||
time, e.g. through demurrage.
|
||||
|
||||
It allows defining the granularity of the rate of change, aswell as a
|
||||
frequency for which the rate of change is applied.
|
||||
|
||||
A method for canonical value change calculations is also provided.
|
||||
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
b716af03
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
interface ITokenChangeRate {
|
||||
// Time unit resolution for rate of change.
|
||||
// A value of 0 indicates no rate of change,
|
||||
function changeTimeUnit() external view returns(uint256);
|
||||
|
||||
// Rate of change per changeTimeUnit(), signed integer.
|
||||
// An effective value of 0 indicates no rate of change.
|
||||
function changeRate() external view returns (int256);
|
||||
|
||||
// Number of decimals with which the changeRate is defined.
|
||||
// changeRate() should be divided by 10 ** changeRateDecimals() to obtain effective value
|
||||
function changeRateDecimals() external view returns(uint8);
|
||||
|
||||
// Timestamp from when rate of change should be applied.
|
||||
// A value of 0 indicates no rate of change,
|
||||
function changeStartTime() external view returns(uint256);
|
||||
|
||||
// Calculate value with change rate applied for given amount of time units.
|
||||
// Will calculate compounded change over the given amount of time units
|
||||
function applyChange(int256 _value, uint256 _changeTimeUnits) external view returns(int256);
|
||||
}
|
||||
|
||||
#### Reference implementations
|
||||
|
||||
- <git://holbrook.no/erc20-demurrage-token.git>
|
||||
|
||||
### TokenSwap
|
||||
|
||||
Token swap interface that can fit token escrow purposes aswell as token
|
||||
swap contracts.
|
||||
|
||||
Optionally may define a `defaultToken`, that may among other things be
|
||||
used for `withdraw()` calls without an `inToken`.
|
||||
|
||||
An explicit *ERC20 approval* of the balance to be transacted will
|
||||
usually be required for the implementing contract.
|
||||
|
||||
If the value 0 is passed as argument to `deposit` or `withdraw`,
|
||||
implementers can choose one of two possible outcomes:
|
||||
|
||||
- Noop. 0 *must* be returned.
|
||||
|
||||
- Use *balance* or the max available *allowance*. The actual (spent)
|
||||
value *must* be returned.
|
||||
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
4146b765
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
interface ITokenSwap {
|
||||
// Emitted when a new deposit has been made.
|
||||
event Deposit(address indexed _token, uint256 _value);
|
||||
|
||||
// Default token used to access the token swap.
|
||||
// Returns zero-address if no default token is defined.
|
||||
function defaultToken() external returns (address);
|
||||
|
||||
// Add inToken liquidity to the tune of given value.
|
||||
// Requires token approval for the corresponding value.
|
||||
// If value is 0, up to the full approval MAY be used for the transfer.
|
||||
function deposit(address _inToken, uint256 _value) external returns (uint256);
|
||||
|
||||
// Withdraw pending outToken balance of given value in the pool for the sender.
|
||||
// May require token approval for defaultToken if used by contract as exchange for the withdrawal.
|
||||
// If value is 0, up to the full approval value MAY be used for the transfer.
|
||||
function withdraw(address _outToken, uint256 _value) external returns (uint256);
|
||||
|
||||
// Exchange inToken equalling given value for outToken.
|
||||
// Requires token approval for the value of inToken.
|
||||
// If value is 0, up to the full approval value MAY be used for the transfer.
|
||||
function withdraw(address _outToken, address _inToken, uint256 _value) external returns (uint256);
|
||||
}
|
||||
|
||||
#### Reference implementations
|
||||
|
||||
- <git://holbrook.no/erc20-pool.git>
|
||||
|
||||
#### Handling deposits
|
||||
|
||||
The implementation is free to decide whether deposits can be recovered
|
||||
directly, or if they will be locked in the smart contract - temporarily
|
||||
or permanently.
|
||||
|
||||
For the duration deposits are locked, they are part of the smart
|
||||
contract’s swap liquidity. During this time, locked deposits may only be
|
||||
withdrawn in exchange for other tokens accepted by the contract.
|
||||
|
||||
Deposits that are not locked should be withdrawable using the
|
||||
`withdraw(address,uint256)` (`0xf3fef3a3`) method signature.
|
||||
|
||||
Of course, as with most swap contracts, the tokens available for
|
||||
withdrawal by the holder may not necessarily match the tokens that were
|
||||
deposited by the holder.
|
||||
|
||||
### TokenVote
|
||||
|
||||
|
@ -632,10 +859,12 @@ Voted tokens **SHOULD** be locked until the voting has finalized.
|
|||
|
||||
Finalization of voting should be callable by anyone.
|
||||
|
||||
ERC165 Interface identifier
|
||||
28091366
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
f2e0bfeb
|
||||
|
||||
#### Solidity interface definition
|
||||
|
||||
Solidity interface definition
|
||||
interface ITokenVote {
|
||||
|
||||
// A new proposal has been created.
|
||||
|
@ -655,8 +884,8 @@ Solidity interface definition
|
|||
// * _blockWait blocks from now.
|
||||
function propose(bytes32 _description, uint256 _blockWait, uint24 _targetVotePpm) external returns (uint256);
|
||||
|
||||
// Same as propose(...), but provide options to vote on.
|
||||
function proposeMulti(bytes32 _description, bytes32[] memory _options, uint256 _blockWait, uint24 _targetVotePpm) external returns (uint256);
|
||||
// Add a voting option to a proposal
|
||||
function addOption(uint256 _proposalIdx, bytes32 _description) external;
|
||||
|
||||
// Get number of options available for the proposal.
|
||||
// This decides the boundary of the index that can be used with voteOptions(...)
|
||||
|
@ -691,7 +920,8 @@ Solidity interface definition
|
|||
function finalize() external returns (bool);
|
||||
}
|
||||
|
||||
Reference implementations
|
||||
#### Reference implementations
|
||||
|
||||
- <git://holbrook.no/evm-tokenvote.git>
|
||||
|
||||
### Writer
|
||||
|
@ -716,10 +946,12 @@ Some use-case examples of super-user actions include:
|
|||
|
||||
- Edit access control lists.
|
||||
|
||||
ERC165 Interface identifier
|
||||
#### ERC165 Interface identifier
|
||||
|
||||
abe1f1f5
|
||||
|
||||
Solidity interface definition
|
||||
#### Solidity interface definition
|
||||
|
||||
interface IWriter {
|
||||
// A writer has been added by _executor
|
||||
event WriterAdded(address _writer);
|
||||
|
@ -737,5 +969,6 @@ Solidity interface definition
|
|||
function isWriter(address _writer) external view returns (bool);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
#### Example implementation
|
||||
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
# local imports
|
||||
from cic_contracts.search import search
|
||||
from cic_contracts.names import Name
|
||||
|
||||
erc165_for = search
|
||||
|
||||
def abi(v):
|
||||
return search(v, ext='json')
|
|
@ -0,0 +1 @@
|
|||
b7bca625
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_idx","type":"uint256"},{"indexed":false,"internalType":"address","name":"_account","type":"address"}],"name":"AddressAdded","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"add","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"entry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entryCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"have","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
9479f0ae
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_account","type":"address"},{"indexed":false,"internalType":"bool","name":"_active","type":"bool"}],"name":"AddressActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_account","type":"address"}],"name":"AddressRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"activate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deactivate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"remove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
b1110c1b
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_burned","type":"uint256"}],"name":"Burn","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
869f7594
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_oldCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newCap","type":"uint256"}],"name":"Cap","type":"event"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
4db1ccd4
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"createTime","outputs":[{"internalType":"int64","name":"","type":"int64"}],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
21b7493b
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_declarator","type":"address"},{"indexed":true,"internalType":"address","name":"_subject","type":"address"},{"indexed":true,"internalType":"bytes32","name":"_topic","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"_proof","type":"bytes32"}],"name":"DeclarationAdded","type":"event"},{"inputs":[{"internalType":"address","name":"_subject","type":"address"},{"internalType":"bytes32","name":"_proof","type":"bytes32"},{"internalType":"bytes32","name":"_topic","type":"bytes32"}],"name":"addDeclaration","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_subject","type":"address"},{"internalType":"bytes32","name":"_proof","type":"bytes32"}],"name":"addDeclaration","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_declarator","type":"address"},{"internalType":"address","name":"_subject","type":"address"}],"name":"declaration","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_declarator","type":"address"},{"internalType":"address","name":"_subject","type":"address"},{"internalType":"bytes32","name":"_topic","type":"bytes32"}],"name":"declaration","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_declarator","type":"address"},{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"declarationAddressAt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_declarator","type":"address"}],"name":"declarationCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_subject","type":"address"},{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"declaratorAddressAt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_subject","type":"address"}],"name":"declaratorCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
982ab05d
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[],"name":"defaultDigestEncoding","outputs":[{"internalType":"uint256","name":"_encoding","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"encodeDigest","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_encoding","type":"uint256"}],"name":"encodeDigest","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_codec","type":"uint256"}],"name":"haveDigestEncoding","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
01ffc9a7
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
9493f8b2
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
b61bc941
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
7a0cdf92
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"endTime","outputs":[{"internalType":"int64","name":"","type":"int64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"startTime","outputs":[{"internalType":"int64","name":"","type":"int64"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
b45a3c0e
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Unlocked","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
d0017968
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
cce39764
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
c22876c3
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
dd9d2087
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
d283ef1d
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
150b7a02
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
841a0e94
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"Expired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_oldTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newTimestamp","type":"uint256"}],"name":"ExpiryChange","type":"event"},{"inputs":[],"name":"applyExpiry","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"expires","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
1a3ac634
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"FaucetAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_recipient","type":"address"},{"indexed":true,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Give","type":"event"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"check","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gimme","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"giveTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"nextBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"nextTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
ed75b333
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"toURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"toURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
5878bcf4
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Mint","type":"event"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mintTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
a3002595
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"_msgDigest","type":"bytes"}],"name":"Msg","type":"event"},{"inputs":[],"name":"getMsg","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
cd8391b0
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[{"internalType":"uint256","name":"_codec","type":"uint256"}],"name":"digestCodec","outputs":[{"components":[{"internalType":"uint8","name":"l","type":"uint8"},{"internalType":"uint8","name":"codecRLength","type":"uint8"},{"internalType":"uint8","name":"prefixRLength","type":"uint8"},{"internalType":"bytes16","name":"prefix","type":"bytes16"},{"internalType":"bytes8","name":"codec","type":"bytes8"}],"internalType":"struct IMultiHash.MultiHash","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_codec","type":"uint256"},{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"encodeDigest","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_codec","type":"uint256"}],"name":"haveDigestEncoding","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
52e86958
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"executeOfflineRequest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"isOfflineValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"verifyOfflineRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
37a47be4
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[],"name":"acceptOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
6b578339
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_result","type":"address"}],"name":"OwnershipTaken","type":"event"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"takeOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
d719b0cc
|
|
@ -0,0 +1 @@
|
|||
[{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"bind","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"set","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
effbf671
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_key","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"AddressKey","type":"event"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"addressOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"identifier","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identifierCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
0d7491f8
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_final","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_sealState","type":"uint256"}],"name":"SealStateChange","type":"event"},{"inputs":[],"name":"maxSealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
8a13249c
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_tokenIdx","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_supply","type":"uint256"},{"indexed":false,"internalType":"address","name":"_token","type":"address"}],"name":"TokenCreated","type":"event"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"withdrawFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
ac3142f7
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_blockDeadline","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"voteTargetPpm","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_proposalIdx","type":"uint256"}],"name":"ProposalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"indexed":true,"internalType":"bool","name":"_cancelled","type":"bool"},{"indexed":true,"internalType":"bool","name":"_insufficient","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_totalVote","type":"uint256"}],"name":"ProposalCompleted","type":"event"},{"inputs":[],"name":"finalize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"internalType":"uint256","name":"_optionIdx","type":"uint256"}],"name":"getOption","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"}],"name":"optionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_description","type":"bytes32"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_description","type":"bytes32"},{"internalType":"bytes32[]","name":"_options","type":"bytes32[]"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"proposeMulti","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"vote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"voteCancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"internalType":"uint256","name":"_optionIdx","type":"uint256"}],"name":"voteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_optionIndex","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"voteOption","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1 @@
|
|||
abe1f1f5
|
|
@ -0,0 +1 @@
|
|||
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_writer","type":"address"}],"name":"WriterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_writer","type":"address"}],"name":"WriterDeleted","type":"event"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"deleteWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
|
|
@ -0,0 +1,4 @@
|
|||
# standard imports
|
||||
import os
|
||||
|
||||
data_dir = os.path.dirname(os.path.realpath(__file__))
|
|
@ -0,0 +1,10 @@
|
|||
# standard imports
|
||||
import enum
|
||||
|
||||
class Name(enum.Enum):
|
||||
WRITER = "Writer"
|
||||
EXPIRE = "Expire"
|
||||
SEAL = "Seal"
|
||||
CAPPED = "Capped"
|
||||
MINTER = "Minter"
|
||||
BURNER = "Burner"
|
|
@ -0,0 +1,16 @@
|
|||
# standard imports
|
||||
import os
|
||||
|
||||
# local imports
|
||||
from cic_contracts.data import data_dir
|
||||
from cic_contracts.names import Name
|
||||
|
||||
|
||||
def search(v, ext='interface', search_dir=data_dir):
|
||||
if isinstance(v, Name):
|
||||
v = v.value
|
||||
fp = os.path.join(search_dir, v + '.' + ext)
|
||||
f = open(fp, 'r')
|
||||
r = f.read()
|
||||
f.close()
|
||||
return r.rstrip()
|
|
@ -1,13 +1,17 @@
|
|||
# standard imports
|
||||
import os
|
||||
|
||||
# local imports
|
||||
from cic_contracts.search import search
|
||||
from cic_contracts import Name
|
||||
|
||||
cic_unittest_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
contracts_dir = os.path.join(cic_unittest_dir, 'solidity')
|
||||
|
||||
|
||||
def bytecode(v):
|
||||
fp = os.path.join(contracts_dir, v.capitalize() + 'Test.bin')
|
||||
f = open(fp, 'r')
|
||||
r = f.read()
|
||||
f.close()
|
||||
return r
|
||||
if isinstance(v, Name):
|
||||
v = v.value
|
||||
return search(v + 'Test', ext='bin', search_dir=contracts_dir)
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
608060405234801561001057600080fd5b5060405161070438038061070483398181016040528101906100329190610081565b8060008190555080600281905550506100ae565b600080fd5b6000819050919050565b61005e8161004b565b811461006957600080fd5b50565b60008151905061007b81610055565b92915050565b60006020828403121561009757610096610046565b5b60006100a58482850161006c565b91505092915050565b610647806100bd6000396000f3fe608060405234801561001057600080fd5b506004361061007f576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a71461008457806342966c68146100b457806344d17187146100e457806344df8e7014610100578063a2309ff81461011e578063d89135cd1461013c575b600080fd5b61009e60048036038101906100999190610353565b61015a565b6040516100ab919061039b565b60405180910390f35b6100ce60048036038101906100c991906103ec565b61020a565b6040516100db919061039b565b60405180910390f35b6100fe60048036038101906100f991906104dc565b61021f565b005b61010861022f565b604051610115919061055f565b60405180910390f35b610126610241565b604051610133919061055f565b60405180910390f35b610144610247565b604051610151919061055f565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101ae5760019050610205565b63bc4babdd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036102005760019050610205565b600090505b919050565b60006102158261024d565b5060019050919050565b6102288361020a565b5050505050565b600061023c60005461024d565b905090565b60005481565b60015481565b6000808260025461025e91906105a9565b101561026957600080fd5b816001600082825461027b91906105dd565b92505081905550816002600082825461029491906105a9565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516102e1919061055f565b60405180910390a2819050919050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610330816102fb565b811461033b57600080fd5b50565b60008135905061034d81610327565b92915050565b600060208284031215610369576103686102f1565b5b60006103778482850161033e565b91505092915050565b60008115159050919050565b61039581610380565b82525050565b60006020820190506103b0600083018461038c565b92915050565b6000819050919050565b6103c9816103b6565b81146103d457600080fd5b50565b6000813590506103e6816103c0565b92915050565b600060208284031215610402576104016102f1565b5b6000610410848285016103d7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061044482610419565b9050919050565b61045481610439565b811461045f57600080fd5b50565b6000813590506104718161044b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261049c5761049b610477565b5b8235905067ffffffffffffffff8111156104b9576104b861047c565b5b6020830191508360018202830111156104d5576104d4610481565b5b9250929050565b600080600080606085870312156104f6576104f56102f1565b5b600061050487828801610462565b9450506020610515878288016103d7565b935050604085013567ffffffffffffffff811115610536576105356102f6565b5b61054287828801610486565b925092505092959194509250565b610559816103b6565b82525050565b60006020820190506105746000830184610550565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006105b4826103b6565b91506105bf836103b6565b92508282039050818111156105d7576105d661057a565b5b92915050565b60006105e8826103b6565b91506105f3836103b6565b925082820190508082111561060b5761060a61057a565b5b9291505056fea26469706673582212208cc8e912e94a09c49f6772a6a0bfcea389d65478dcee0b3e12fa669028b5567e64736f6c63430008130033
|
|
@ -0,0 +1,50 @@
|
|||
pragma solidity >=0.6.3;
|
||||
|
||||
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
contract MinterTest {
|
||||
uint256 public totalMinted;
|
||||
uint256 public totalBurned;
|
||||
uint256 balance;
|
||||
|
||||
event Burn(address indexed _burner, uint256 _burned);
|
||||
|
||||
constructor(uint256 _mintValue) {
|
||||
totalMinted = _mintValue;
|
||||
balance = _mintValue;
|
||||
}
|
||||
|
||||
function burn(address _from, uint256 _value, bytes calldata _data) public {
|
||||
_from;
|
||||
_data;
|
||||
burn(_value);
|
||||
}
|
||||
|
||||
function burn(uint256 _value) public returns (bool) {
|
||||
burnCore(_value);
|
||||
return true;
|
||||
}
|
||||
|
||||
function burnCore(uint256 _value) internal returns(uint256) {
|
||||
require(balance - _value >= 0);
|
||||
totalBurned += _value;
|
||||
balance -= _value;
|
||||
emit Burn(msg.sender, _value);
|
||||
return _value;
|
||||
}
|
||||
|
||||
function burn() public returns (uint256) {
|
||||
return burnCore(totalMinted);
|
||||
}
|
||||
|
||||
function supportsInterface(bytes4 _sum) public pure returns (bool) {
|
||||
if (_sum == 0x01ffc9a7) { // EIP165
|
||||
return true;
|
||||
}
|
||||
if (_sum == 0xbc4babdd) { // Burner
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
608060405234801561001057600080fd5b506040516104003803806104008339818101604052810190610032919061007a565b80600081905550506100a7565b600080fd5b6000819050919050565b61005781610044565b811461006257600080fd5b50565b6000815190506100748161004e565b92915050565b6000602082840312156100905761008f61003f565b5b600061009e84828501610065565b91505092915050565b61034a806100b66000396000f3fe608060405234801561001057600080fd5b506004361061005e576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a7146100635780636f8b44b014610093578063d5abeb01146100af575b600080fd5b61007d60048036038101906100789190610224565b6100cd565b60405161008a919061026c565b60405180910390f35b6100ad60048036038101906100a891906102bd565b61017d565b005b6100b76101c1565b6040516100c491906102f9565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101215760019050610178565b63869f75947c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101735760019050610178565b600090505b919050565b6000547f9722adea12ab7ef86fc45b88f0e0b567639e8dddaae60261e08c03d747fbbfe6826040516101af91906102f9565b60405180910390a28060008190555050565b60005481565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610201816101cc565b811461020c57600080fd5b50565b60008135905061021e816101f8565b92915050565b60006020828403121561023a576102396101c7565b5b60006102488482850161020f565b91505092915050565b60008115159050919050565b61026681610251565b82525050565b6000602082019050610281600083018461025d565b92915050565b6000819050919050565b61029a81610287565b81146102a557600080fd5b50565b6000813590506102b781610291565b92915050565b6000602082840312156102d3576102d26101c7565b5b60006102e1848285016102a8565b91505092915050565b6102f381610287565b82525050565b600060208201905061030e60008301846102ea565b9291505056fea26469706673582212202fae6928974c7d7b0aa39737c7a191972db33126d9966e893091aac145fd34c864736f6c63430008130033
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue