Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a7cc695045
|
||
|
|
64e8df2573
|
||
|
|
45ca79cf46
|
||
|
|
fe4f1c2c41
|
||
|
|
80589e574a
|
||
|
|
5ff686e513
|
||
|
|
6aa0319407
|
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
|
||||
|
||||
@@ -1 +1 @@
|
||||
include *requirements.txt solidity/* LICENSE README*
|
||||
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
|
||||
|
||||
|
||||
741
python/README.md
Normal file
741
python/README.md
Normal file
@@ -0,0 +1,741 @@
|
||||
# Smart contract interfaces
|
||||
|
||||
## Technology
|
||||
|
||||
CIC smart contracts are implemented using the *solidity* programming
|
||||
language for the (Ethereum Virtual Machine (EVM).
|
||||
|
||||
## Adopted standards
|
||||
|
||||
### Signing
|
||||
|
||||
### ERC - Direct use
|
||||
|
||||
The following well-known solidity interfaces are used directly.
|
||||
|
||||
- [ERC20 - Token Standard](https://eips.ethereum.org/EIPS/eip-20)
|
||||
|
||||
- [ERC165 - Standard Interface
|
||||
Detection](https://eips.ethereum.org/EIPS/eip-165)
|
||||
|
||||
- [ERC173 - Contract Ownership
|
||||
Standard](https://eips.ethereum.org/EIPS/eip-173)
|
||||
|
||||
- [ERC191 - Signed Data
|
||||
Standard](https://eips.ethereum.org/EIPS/eip-191)
|
||||
|
||||
- [ERC712 - Typed structured data hashing and
|
||||
signing](https://eips.ethereum.org/EIPS/eip-712)
|
||||
|
||||
- [ERC721 - Non-Fungible Token
|
||||
Standard](https://eips.ethereum.org/EIPS/eip-721)
|
||||
|
||||
- [ERC5007 - Time NFT (EIP-721 Time
|
||||
Extension)](https://eips.ethereum.org/EIPS/eip-5007)
|
||||
|
||||
- [ERC5192 - Minimal Soulbound
|
||||
NFTs](https://eips.ethereum.org/EIPS/eip-5192)
|
||||
|
||||
### ERCs Partial use
|
||||
|
||||
The following well-known solidity interfaces are partially implemented
|
||||
in CIC native interfaces.
|
||||
|
||||
- [ERC5679 - Token Minting and
|
||||
Burning](https://eips.ethereum.org/EIPS/eip-5679) (See `Minter`,
|
||||
`Burner`)
|
||||
|
||||
## Native interfaces
|
||||
|
||||
### Accounts Index
|
||||
|
||||
Append-only list of addresses. Typically used for access control lists.
|
||||
|
||||
Addresses may be *added*, *removed*, aswell as *deactivated* and
|
||||
*activated*. Deactivated accounts still count towards the `entryCount`.
|
||||
|
||||
The `entry` method is used to iterate the account list. The order of
|
||||
which accounts are returned is not guaranteed. Any returned value
|
||||
matching `address(0x00)` should be skipped, and not counted towards
|
||||
`entryCount`.
|
||||
|
||||
May optionally record time when account was added.
|
||||
|
||||
ERC165 Interface identifier
|
||||
b7bca625
|
||||
|
||||
Solidity interface definition
|
||||
interface IAccountsIndex {
|
||||
// Address added to store, index in array.
|
||||
event AddressAdded(uint256 indexed _idx, address _account);
|
||||
|
||||
// Return number of entries in index.
|
||||
function entryCount() external view returns (uint256);
|
||||
|
||||
// Return entry at the spceificed index.
|
||||
// Will revert if index is beyond array length.
|
||||
// An entry result of 0 means the entry should be skipped, and not count towards entry count.
|
||||
function entry(uint256) external view returns (address);
|
||||
|
||||
// Add an entry to the index. Incresases the entry count.
|
||||
function add(address) external returns (bool);
|
||||
|
||||
// Verify that the entry exists in the index.
|
||||
function have(address) external view returns (bool);
|
||||
|
||||
// Retrieve the timestamp when account was added.
|
||||
// If time is not being tracked, a value of 0 should be returned.
|
||||
function time(address) external view returns (uint256);
|
||||
}
|
||||
|
||||
Reference implementation
|
||||
<git://holbrook.no/eth-accounts-index.git> (v0.5.1)
|
||||
|
||||
### Accounts Index Mutable
|
||||
|
||||
Extends the functionality of `Accounts Index` to allow changes to the
|
||||
address list.
|
||||
|
||||
Addresses may be *added*, *removed*, aswell as *deactivated* and
|
||||
*activated*. Deactivated accounts still count towards the `entryCount`.
|
||||
|
||||
ERC165 Interface identifier
|
||||
9479f0ae
|
||||
|
||||
Solidity interface definition
|
||||
interface IAccountsIndexMutable {
|
||||
// Active status of address changed, and by whom changed.
|
||||
event AddressActive(address indexed _account, bool _active);
|
||||
|
||||
// Address removed from store, and by whom removed.
|
||||
event AddressRemoved(address _account);
|
||||
|
||||
// Remove an entry from the index. Reduces the entry count.
|
||||
function remove(address) external returns (bool);
|
||||
|
||||
// Deactivate account but keep in index. Does not affect entry count.
|
||||
function deactivate(address) external returns (bool);
|
||||
|
||||
// Activate previously deactivated account. Does not affect entry count.
|
||||
function activate(address) external returns (bool);
|
||||
|
||||
// Check if account exists and is active;
|
||||
function isActive(address) external view returns (bool);
|
||||
}
|
||||
|
||||
Reference implementation
|
||||
<git://holbrook.no/eth-accounts-index.git> (v0.5.1)
|
||||
|
||||
### Burner
|
||||
|
||||
Attached to `ERC20` and `ERC721` tokens that may be *burned*.
|
||||
|
||||
Implements the `burn(...)` part of `ERC5679` for interoperability.
|
||||
|
||||
ERC165 Interface identifier
|
||||
bc4babdd
|
||||
|
||||
Solidity interface definition
|
||||
interface IBurner {
|
||||
// Token(s) successfully burned; by who and how much.
|
||||
event Burn(address indexed _burner, uint256 _burned);
|
||||
|
||||
// Satisfies ERC 5679
|
||||
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);
|
||||
|
||||
// Burn all tokens held by signer.
|
||||
function burn() external returns (bool);
|
||||
|
||||
// Total amount of tokens that have been burned.
|
||||
function totalBurned() external returns (uint256);
|
||||
|
||||
// Total amount of tokens ever minted.
|
||||
// If totalSupply() is available (ERC20, ERC721 Enumerable), this equals totalSupply() + totalBurned().
|
||||
function totalMinted() external returns (uint256);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
||||
### Chrono
|
||||
|
||||
Define a creation time for a resource.
|
||||
|
||||
Complements `ERC5007`.
|
||||
|
||||
ERC165 Interface identifier
|
||||
4db1ccd4
|
||||
|
||||
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
|
||||
<https://git.defalsify.org/eth-erc721> (BadgeToken contract)
|
||||
|
||||
### Declarator
|
||||
|
||||
Permissionless store of signed claims made by an address about other
|
||||
addresses, or addresses about themselves.
|
||||
|
||||
It is used to declare or respond to certifications of vouchers, NFT,
|
||||
voucher members.
|
||||
|
||||
Addresses may be Externally Owned Accounts or smart contracts.
|
||||
|
||||
Claims may be made with or without topics. A missing topic is synonymous
|
||||
with a topic value of `bytes32(0x00)`.
|
||||
|
||||
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
|
||||
21b7493b
|
||||
|
||||
Solidity interface definition
|
||||
interface IDeclarator {
|
||||
event DeclarationAdded(address indexed _declarator, address indexed _subject, bytes32 indexed _topic, bytes32 _proof);
|
||||
|
||||
// Get all declarations for a subject (without topic) signed by a declarator
|
||||
function declaration(address _declarator, address _subject) external view returns ( bytes32[] memory );
|
||||
|
||||
// Get all declarations for a subject for the given topic signed by a declarator
|
||||
function declaration(address _declarator, address _subject, bytes32 _topic) external view returns ( bytes32[] memory );
|
||||
|
||||
// Get number of declarations the declarator has ever signed
|
||||
function declarationCount(address _declarator) external view returns ( uint256 );
|
||||
|
||||
// Get the subject of a declarator's declarations at the specific index
|
||||
function declarationAddressAt(address _declarator, uint256 _idx) external view returns ( address );
|
||||
|
||||
// Add a declaration for the subject
|
||||
function addDeclaration(address _subject, bytes32 _proof) external returns ( bool );
|
||||
|
||||
// Add a declaration with topic for the subject
|
||||
function addDeclaration(address _subject, bytes32 _proof, bytes32 _topic) external returns ( bool );
|
||||
|
||||
// Get the declarator that signed a declaration at the specificed index for a subject
|
||||
function declaratorAddressAt(address _subject, uint256 _idx) external view returns ( address );
|
||||
|
||||
// Get the number of declarators that have signed for a subject
|
||||
function declaratorCount(address _subject) external view returns ( uint256 );
|
||||
}
|
||||
|
||||
Reference implementation
|
||||
<git://holbrook.no/eth-address-index.git>
|
||||
|
||||
### Digest
|
||||
|
||||
Allows encoding of digests according to a specific encoding scheme.
|
||||
|
||||
Primary use-case is the abstraction of self-describing
|
||||
[Multhash](https://multiformats.io/multihash/) encoding.
|
||||
|
||||
A default encoding *must* always be defined, and the encoding of a valid
|
||||
digest *must* succeed with the default encoding.
|
||||
|
||||
ERC165 Interface identifier
|
||||
982ab05d
|
||||
|
||||
Solidity interface definition
|
||||
interface IDigest {
|
||||
// Returns the default digest encoding used by the contract instance.
|
||||
function defaultDigestEncoding() external view returns (uint256 _encoding);
|
||||
|
||||
// Check if the given encoding has been implemented in the contract instance.
|
||||
function haveDigestEncoding(uint256 _codec) external view returns(bool);
|
||||
|
||||
// Verify and encode the given digest for a specific hashing algorithm.
|
||||
// Returns a zero-length byte array if digest is invalid.
|
||||
// Must succeed if called with the defaultDigestEncoding and a valid digest.
|
||||
function encodeDigest(bytes memory _data, uint256 _encoding) external view returns (bytes memory);
|
||||
|
||||
// Encodes the digest using the default digest encoding.
|
||||
// Returns a zero-length byte array if digest is invalid.
|
||||
// Must succeed with a valid digest.
|
||||
function encodeDigest(bytes memory _data) external view returns (bytes memory);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
<git://holbrook.no/eth-event-msg.git>
|
||||
|
||||
### Expire
|
||||
|
||||
Defines an expiry time after which token balances or supply *cannot
|
||||
change*.
|
||||
|
||||
A contract defining an expiry *must not* allow changing the expiration
|
||||
time to a time in the past.
|
||||
|
||||
ERC165 Interface identifier
|
||||
841a0e94
|
||||
|
||||
Solidity interface definition
|
||||
interface IExpire {
|
||||
// Contract has expired.
|
||||
event Expired(uint256 _timestamp);
|
||||
|
||||
// Expiry time has changed.
|
||||
event ExpiryChange(uint256 indexed _oldTimestamp, uint256 _newTimestamp);
|
||||
|
||||
// The current expiration timestamp.
|
||||
function expires() external returns (uint256);
|
||||
|
||||
// Check expiry and apply expiration if expired.
|
||||
// Return values must be:
|
||||
// 0: not yet expired.
|
||||
// 1: already expired.
|
||||
// >1: expiry executed.
|
||||
function applyExpiry() external returns(uint8);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
||||
### Faucet
|
||||
|
||||
Used for dispensing tokens to any address.
|
||||
|
||||
It can be used for gas tokens and *ERC20* alike.
|
||||
|
||||
The interface is the same whether the faucet is dispensing from existing
|
||||
balance or minting new tokens.
|
||||
|
||||
The value dispersed *must* be the same for all addresses.
|
||||
|
||||
In general, four criteria are expected to exist in any combination for
|
||||
limiting access to the faucet:
|
||||
|
||||
Time
|
||||
A recipient may only use the faucet again after some time has passed.
|
||||
|
||||
Balance threshold
|
||||
A recipient may only use the faucet after its balance is below a certain
|
||||
amount.
|
||||
|
||||
Membership
|
||||
A recipient may only use the faucet if it has been added to an access
|
||||
control list.
|
||||
|
||||
Capacity
|
||||
The contract has sufficient token funds to dispense the current defined
|
||||
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
|
||||
1a3ac634
|
||||
|
||||
Solidity interface definition
|
||||
interface IFaucet {
|
||||
// Tokens were given to an address
|
||||
event Give(address indexed _recipient, address indexed _token, uint256 _value);
|
||||
|
||||
// The amount that the faucet disperses has changed
|
||||
event FaucetAmountChange(uint256 _value);
|
||||
|
||||
// Address of token the faucet represents
|
||||
// The faucet will return gas tokens with the zero-address is returned.
|
||||
function token() external returns (address);
|
||||
|
||||
// Amount of tokens the faucet gives out
|
||||
function tokenAmount() external returns (uint256);
|
||||
|
||||
// Give tokens to the given recipient. Returns amount of tokens given.
|
||||
function giveTo(address _recipient) external returns (uint256);
|
||||
|
||||
// Give tokens to yourself. Returns amount of tokens given.
|
||||
function gimme() external returns (uint256);
|
||||
|
||||
// Check if faucet may be used in the current contract state by _recipient
|
||||
function check(address _recipient) external view returns (bool);
|
||||
|
||||
// Returns timestamp when faucet may be used again by _recipient
|
||||
// If 0 is returned, the address has not yet been used.
|
||||
// A return value of max(uint256) indicates that the faucet may not be used again.
|
||||
function nextTime(address _recipient) external returns (uint256);
|
||||
|
||||
// Returns the token balance under which faucet may be used again by _recipient
|
||||
// A return value of max(uint256) indicates that the faucet may be used regardless
|
||||
// of the token balance of _recipient
|
||||
function nextBalance(address _recipient) external returns (uint256);
|
||||
}
|
||||
|
||||
Reference implementations
|
||||
- <git://holbrook.no/erc20-faucet.git>
|
||||
|
||||
- <git://holbrook.no/eth-faucet.git>
|
||||
|
||||
### Locator
|
||||
|
||||
This interface supports `ERC721 Metadata`, in particular the
|
||||
`tokenURI(uint256)` call.
|
||||
|
||||
Off-chain resources in the CIC network *must* be defined in terms of
|
||||
content addressed strings.
|
||||
|
||||
It *must* be possible to refer to all off-chain resources directly by
|
||||
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
|
||||
ed75b333
|
||||
|
||||
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);
|
||||
|
||||
// URL pointing to a specific resource location.
|
||||
function toURL(bytes memory _data) external view returns(string memory);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
<git://holbrook.no/eth-event-msg.git>
|
||||
|
||||
#### Expressing locators in terms of numetic token id
|
||||
|
||||
Given the numeric token id `1234567890987654321` (`0x112210f4b16c1cb1`
|
||||
hex), and a base url `https://contentgateway.grassecon.net`, the result
|
||||
of the methods may be as follows:
|
||||
|
||||
`toURI(toHex(1234567890987654321))`
|
||||
-\>
|
||||
`https://contentgateway.grassecon.net/000000000000000000000000000000000000000000000000112210f4b16c1cb1`
|
||||
|
||||
`toURL(toHex(1234567890987654321))`
|
||||
-\>
|
||||
`https://contentgateway.grassecon.net/000000000000000000000000000000000000000000000000112210f4b16c1cb1`
|
||||
|
||||
`tokenURI(1234567890987654321)`
|
||||
-\>
|
||||
`https://contentgateway.grassecon.net/000000000000000000000000000000000000000000000000112210f4b16c1cb1`
|
||||
|
||||
#### Expressing locators in terms of a digest
|
||||
|
||||
Given the data `foo`, the digest algorithm `sha256` and a base url
|
||||
`https://contentgateway.grassecon.net`, the result of the methods may be
|
||||
as follows:
|
||||
|
||||
`toURI(sha256(foo))`
|
||||
-\>
|
||||
`"sha256:2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"`
|
||||
|
||||
`toURL(sha256(foo))`
|
||||
-\>
|
||||
`"https://contentgateway.grassecon.net/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"`
|
||||
|
||||
`tokenURI(toUint(sha256(foo)))`
|
||||
-\>
|
||||
`"https://contentgateway.grassecon.net/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"`
|
||||
|
||||
#### Locator without URL
|
||||
|
||||
Given the data `foo`, the digest algorithm `sha256` and no base url, the
|
||||
result of the methods may be as follows:
|
||||
|
||||
`toURI(sha256(foo))`
|
||||
-\>
|
||||
`"sha256:2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"`
|
||||
|
||||
`toURL(sha256(foo))`
|
||||
-\> `""`
|
||||
|
||||
`tokenURI(toUint(sha256(foo)))`
|
||||
-\>
|
||||
`"sha256:2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"`
|
||||
|
||||
### Minter
|
||||
|
||||
Attached to `ERC20` and `ERC721` tokens that may be minted.
|
||||
|
||||
Implements the `mint(...)` and `safeMint(...)` parts of `ERC5679` for
|
||||
interoperability.
|
||||
|
||||
ERC165 Interface identifier
|
||||
5878bcf4
|
||||
|
||||
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);
|
||||
|
||||
// Mint the specified value of tokens to the specified recipient
|
||||
function mintTo(address _beneficiary, uint256 value) external returns (bool);
|
||||
|
||||
// Satisfies ERC5679 for ERC20
|
||||
function mint(address _beneficiary, uint256 value, bytes calldata _data) external;
|
||||
|
||||
// Satisfies ERC5679 for ERC721
|
||||
function safeMint(address _beneficiary, uint256 value, bytes calldata _data) external;
|
||||
}
|
||||
|
||||
Example implementation
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
||||
### Msg
|
||||
|
||||
Enables a reference "message" to describe the contract using an
|
||||
off-chain resource.
|
||||
|
||||
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
|
||||
a3002595
|
||||
|
||||
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
|
||||
event Msg(bytes _msgDigest);
|
||||
|
||||
// Get the current message content hash
|
||||
function getMsg() external view returns(bytes memory);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
<git://holbrook.no/eth-event-msg.git>
|
||||
|
||||
### Registry
|
||||
|
||||
The Registry interface is a key-value store resolving well-known
|
||||
contract identifier names to contract addresses.
|
||||
|
||||
It currently has two distinct uses in the CIC context:
|
||||
|
||||
1. Entry-point to discover all relevant contracts of CIC networks.
|
||||
|
||||
2. Unique (ERC20) token symbol resolver.
|
||||
|
||||
ERC165 Interface identifier
|
||||
effbf671
|
||||
|
||||
Solidity interface definition
|
||||
interface IRegistryClient {
|
||||
// Address added to store with the given key
|
||||
event AddressKey(bytes32 indexed _key, address _address);
|
||||
|
||||
// Return the address of the contract identified by the given byte string
|
||||
function addressOf(bytes32) external view returns (address);
|
||||
|
||||
// Indexed accessor for the full list of registred identifiers
|
||||
function identifier(uint256) external view returns (bytes32);
|
||||
|
||||
// Number of registered interfaces
|
||||
function identifierCount() external view returns (uint256);
|
||||
}
|
||||
|
||||
Contract registry implementation
|
||||
<git://holbrook.no/eth-contract-registry.git>
|
||||
|
||||
Token index implementation
|
||||
<git://holbrook.no/eth-contract-registry.git>
|
||||
|
||||
### Seal
|
||||
|
||||
Some smart contract parameters may need to be mutable over part of a
|
||||
smart contract’s lifetime.
|
||||
|
||||
This interface provides a method to explicitly signal when certain
|
||||
parameters have been rendered immutable.
|
||||
|
||||
The value of `sealState()` *must not* decrease, and must not exceed
|
||||
`maxSealState`.
|
||||
|
||||
`maxSealState` is used to define that *all mutable parameters* have been
|
||||
rendered immutable. The practical implications of this will vary between
|
||||
contracts.
|
||||
|
||||
The implementer is encouraged to use simple, descriptive names in the
|
||||
source code to describe the applicable seal states.
|
||||
|
||||
Use cases of sealing include:
|
||||
|
||||
- Whether more tokens can be minted
|
||||
|
||||
- Allow ownership of a contract to be transferred
|
||||
|
||||
- The expiry time of a token (see `Expire`)
|
||||
|
||||
ERC165 Interface identifier
|
||||
0d7491f8
|
||||
|
||||
Solidity interface definition
|
||||
interface ISeal {
|
||||
// Seal state has changed.
|
||||
event SealStateChange(bool indexed _final, uint256 _sealState);
|
||||
|
||||
// The current seal state.
|
||||
function sealState() external view returns(uint256);
|
||||
|
||||
// The numeric seal state in everything sealable has been sealed.
|
||||
function maxSealState() external view returns(uint256);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
|
||||
### TokenVend
|
||||
|
||||
This interface defines the mechanism for which a specific ERC20 token
|
||||
may be exchanged for a different ERC20 token.
|
||||
|
||||
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 tokens used for exchange **SHOULD** be locked for the full duration
|
||||
of holding the vended tokens.
|
||||
|
||||
The withdrawal function may or may not allow partial withdrawals.
|
||||
|
||||
ERC165 Interface identifier
|
||||
8a13249c
|
||||
|
||||
Solidity interface definition
|
||||
interface ITokenVend {
|
||||
// A new vended token has been created.
|
||||
event TokenCreated(uint256 indexed _tokenIdx, uint256 indexed _supply, address _token);
|
||||
|
||||
// Create corresponding vended tokens for the control token balance of the caller.
|
||||
function getFor(address _token) external returns (uint256);
|
||||
|
||||
// Recover control tokens that were used to retrieve the corresponding vended tokens.
|
||||
function withdrawFor(address _token) external returns (uint256);
|
||||
}
|
||||
|
||||
Reference implementations
|
||||
- <git://holbrook.no/erc20-vend.git>
|
||||
|
||||
### TokenVote
|
||||
|
||||
Execute elections with granular ERC20 token votes.
|
||||
|
||||
A proposal submitted for vote may or may not contain multiple options.
|
||||
If multiple options are available, an ERC20 token holder may distribute
|
||||
its vote among the options with the granularity of the token balance.
|
||||
|
||||
Voted tokens **SHOULD** be locked until the voting has finalized.
|
||||
|
||||
Finalization of voting should be callable by anyone.
|
||||
|
||||
ERC165 Interface identifier
|
||||
28091366
|
||||
|
||||
Solidity interface definition
|
||||
interface ITokenVote {
|
||||
|
||||
// A new proposal has been created.
|
||||
event ProposalAdded(uint256 indexed _blockDeadline, uint256 indexed voteTargetPpm, uint256 indexed _proposalIdx);
|
||||
|
||||
// A proposal vote has been completed.
|
||||
// The proposal is identified by the serial number in _proposalIdx. It is up to the implementer to define how the proposal should be retrieved by index.
|
||||
// The proposal result may be in one of three states:
|
||||
// * Ratified (_cancelled == false, _insufficient == false)
|
||||
// * Cancelled (_cancelled == true, _insufficient == false)
|
||||
// * Not reached quorum (_cancelled == false, _insufficient == true)
|
||||
event ProposalCompleted(uint256 indexed _proposalIdx, bool indexed _cancelled, bool indexed _insufficient, uint256 _totalVote);
|
||||
|
||||
// Propose a new vote.
|
||||
// Voting is active until one of:
|
||||
// * total cancel vote reach quorum (_targetVotePpm, ppm = parts-per-million).
|
||||
// * _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);
|
||||
|
||||
// Get number of options available for the proposal.
|
||||
// This decides the boundary of the index that can be used with voteOptions(...)
|
||||
// If the result is 0, vote(...) can be used aswell.
|
||||
function optionCount(uint256 _proposalIdx) external view returns(uint256);
|
||||
|
||||
// Get proposal option. Assumes that proposal was created with proposeMulti(...)
|
||||
function getOption(uint256 _proposalIdx, uint256 _optionIdx) external view returns (bytes32);
|
||||
|
||||
// Get vote count for the given option.
|
||||
// If proposal has no options, it should be called with _optionIdx = 0
|
||||
function voteCount(uint256 _proposalIdx, uint256 _optionIdx) external view returns(uint256);
|
||||
|
||||
// Vote on a proposal without options.
|
||||
// Assumes that proposal was created with propose(...) and will fail otherwise.
|
||||
function vote(uint256 _value) external returns (bool);
|
||||
|
||||
// Vote on a proposal option. Assumes that proposal was created with proposeMulti(...).
|
||||
// Must work with a non-option proposal if _optionIndex is 0.
|
||||
function voteOption(uint256 _optionIndex, uint256 _value) external returns (bool);
|
||||
|
||||
// Vote to cancel a proposal.
|
||||
// If cancel has the majority:
|
||||
// * A vote without options will have rejected the proposal description.
|
||||
// * A vote with options will have rejected the proposal description as well as all option descriptions.
|
||||
function voteCancel(uint256 _value) external returns (bool);
|
||||
|
||||
// Finalize the vote for a proposal.
|
||||
// May be called if deadline has been passed, or if:
|
||||
// * quorum has been reached with cancel votes.
|
||||
// * quorum has been reached and proposal has no/only one option.
|
||||
function finalize() external returns (bool);
|
||||
}
|
||||
|
||||
Reference implementations
|
||||
- <git://holbrook.no/evm-tokenvote.git>
|
||||
|
||||
### Writer
|
||||
|
||||
A complement to ERC173, which allows definition of a class of
|
||||
super-users for a contract.
|
||||
|
||||
A super-user address may perform *more* actions than a "normal" address,
|
||||
aswell as *some* actions normally limited to the *contract owner*.
|
||||
|
||||
If an *contract owner* is defined, No super-user should be able to
|
||||
perform actions that *contract owner* cannot perform.
|
||||
|
||||
Typically, only the *contract owner*, if it is defined, can add or
|
||||
remove a super-user.
|
||||
|
||||
Some use-case examples of super-user actions include:
|
||||
|
||||
- Mint new tokens.
|
||||
|
||||
- Change the amount dispensed by the faucet.
|
||||
|
||||
- Edit access control lists.
|
||||
|
||||
ERC165 Interface identifier
|
||||
abe1f1f5
|
||||
|
||||
Solidity interface definition
|
||||
interface IWriter {
|
||||
// A writer has been added by _executor
|
||||
event WriterAdded(address _writer);
|
||||
|
||||
// A writer has been removed by _executor
|
||||
event WriterDeleted(address _writer);
|
||||
|
||||
// Add a new writer to the contract.
|
||||
function addWriter(address _writer) external returns (bool);
|
||||
|
||||
// Remove existing writer from the contract.
|
||||
function deleteWriter(address _writer) external returns (bool);
|
||||
|
||||
// Check whether the given address is a writer.
|
||||
function isWriter(address _writer) external view returns (bool);
|
||||
}
|
||||
|
||||
Example implementation
|
||||
<https://git.grassecon.net/cicnet/erc20-demurrage-token.git>
|
||||
8
python/cic_contracts/__init__.py
Normal file
8
python/cic_contracts/__init__.py
Normal file
@@ -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')
|
||||
1
python/cic_contracts/data/AccountsIndex.interface
Normal file
1
python/cic_contracts/data/AccountsIndex.interface
Normal file
@@ -0,0 +1 @@
|
||||
b7bca625
|
||||
1
python/cic_contracts/data/AccountsIndex.json
Normal file
1
python/cic_contracts/data/AccountsIndex.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/AccountsIndexMutable.interface
Normal file
1
python/cic_contracts/data/AccountsIndexMutable.interface
Normal file
@@ -0,0 +1 @@
|
||||
9479f0ae
|
||||
1
python/cic_contracts/data/AccountsIndexMutable.json
Normal file
1
python/cic_contracts/data/AccountsIndexMutable.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Burner.interface
Normal file
1
python/cic_contracts/data/Burner.interface
Normal file
@@ -0,0 +1 @@
|
||||
b1110c1b
|
||||
1
python/cic_contracts/data/Burner.json
Normal file
1
python/cic_contracts/data/Burner.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Capped.interface
Normal file
1
python/cic_contracts/data/Capped.interface
Normal file
@@ -0,0 +1 @@
|
||||
869f7594
|
||||
1
python/cic_contracts/data/Capped.json
Normal file
1
python/cic_contracts/data/Capped.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Chrono.interface
Normal file
1
python/cic_contracts/data/Chrono.interface
Normal file
@@ -0,0 +1 @@
|
||||
4db1ccd4
|
||||
1
python/cic_contracts/data/Chrono.json
Normal file
1
python/cic_contracts/data/Chrono.json
Normal file
@@ -0,0 +1 @@
|
||||
[{"inputs":[{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"createTime","outputs":[{"internalType":"int64","name":"","type":"int64"}],"stateMutability":"nonpayable","type":"function"}]
|
||||
1
python/cic_contracts/data/Declarator.interface
Normal file
1
python/cic_contracts/data/Declarator.interface
Normal file
@@ -0,0 +1 @@
|
||||
21b7493b
|
||||
1
python/cic_contracts/data/Declarator.json
Normal file
1
python/cic_contracts/data/Declarator.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Digest.interface
Normal file
1
python/cic_contracts/data/Digest.interface
Normal file
@@ -0,0 +1 @@
|
||||
982ab05d
|
||||
1
python/cic_contracts/data/Digest.json
Normal file
1
python/cic_contracts/data/Digest.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/ERC165.interface
Normal file
1
python/cic_contracts/data/ERC165.interface
Normal file
@@ -0,0 +1 @@
|
||||
01ffc9a7
|
||||
1
python/cic_contracts/data/ERC165.json
Normal file
1
python/cic_contracts/data/ERC165.json
Normal file
@@ -0,0 +1 @@
|
||||
[{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}]
|
||||
1
python/cic_contracts/data/ERC173.interface
Normal file
1
python/cic_contracts/data/ERC173.interface
Normal file
@@ -0,0 +1 @@
|
||||
9493f8b2
|
||||
1
python/cic_contracts/data/ERC173.json
Normal file
1
python/cic_contracts/data/ERC173.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/ERC20.interface
Normal file
1
python/cic_contracts/data/ERC20.interface
Normal file
@@ -0,0 +1 @@
|
||||
b61bc941
|
||||
1
python/cic_contracts/data/ERC20.json
Normal file
1
python/cic_contracts/data/ERC20.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/ERC5007.interface
Normal file
1
python/cic_contracts/data/ERC5007.interface
Normal file
@@ -0,0 +1 @@
|
||||
7a0cdf92
|
||||
1
python/cic_contracts/data/ERC5007.json
Normal file
1
python/cic_contracts/data/ERC5007.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/ERC5192.interface
Normal file
1
python/cic_contracts/data/ERC5192.interface
Normal file
@@ -0,0 +1 @@
|
||||
b45a3c0e
|
||||
1
python/cic_contracts/data/ERC5192.json
Normal file
1
python/cic_contracts/data/ERC5192.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/ERC5679Ext20.interface
Normal file
1
python/cic_contracts/data/ERC5679Ext20.interface
Normal file
@@ -0,0 +1 @@
|
||||
d0017968
|
||||
1
python/cic_contracts/data/ERC5679Ext20.json
Normal file
1
python/cic_contracts/data/ERC5679Ext20.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/ERC5679Ext721.interface
Normal file
1
python/cic_contracts/data/ERC5679Ext721.interface
Normal file
@@ -0,0 +1 @@
|
||||
cce39764
|
||||
1
python/cic_contracts/data/ERC5679Ext721.json
Normal file
1
python/cic_contracts/data/ERC5679Ext721.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/ERC721.interface
Normal file
1
python/cic_contracts/data/ERC721.interface
Normal file
@@ -0,0 +1 @@
|
||||
c22876c3
|
||||
1
python/cic_contracts/data/ERC721.json
Normal file
1
python/cic_contracts/data/ERC721.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/ERC721Enumerable.interface
Normal file
1
python/cic_contracts/data/ERC721Enumerable.interface
Normal file
@@ -0,0 +1 @@
|
||||
dd9d2087
|
||||
1
python/cic_contracts/data/ERC721Enumerable.json
Normal file
1
python/cic_contracts/data/ERC721Enumerable.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/ERC721Metadata.interface
Normal file
1
python/cic_contracts/data/ERC721Metadata.interface
Normal file
@@ -0,0 +1 @@
|
||||
d283ef1d
|
||||
1
python/cic_contracts/data/ERC721Metadata.json
Normal file
1
python/cic_contracts/data/ERC721Metadata.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/ERC721Receiver.interface
Normal file
1
python/cic_contracts/data/ERC721Receiver.interface
Normal file
@@ -0,0 +1 @@
|
||||
150b7a02
|
||||
1
python/cic_contracts/data/ERC721Receiver.json
Normal file
1
python/cic_contracts/data/ERC721Receiver.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Expire.interface
Normal file
1
python/cic_contracts/data/Expire.interface
Normal file
@@ -0,0 +1 @@
|
||||
841a0e94
|
||||
1
python/cic_contracts/data/Expire.json
Normal file
1
python/cic_contracts/data/Expire.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Faucet.interface
Normal file
1
python/cic_contracts/data/Faucet.interface
Normal file
@@ -0,0 +1 @@
|
||||
1a3ac634
|
||||
1
python/cic_contracts/data/Faucet.json
Normal file
1
python/cic_contracts/data/Faucet.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Locator.interface
Normal file
1
python/cic_contracts/data/Locator.interface
Normal file
@@ -0,0 +1 @@
|
||||
ed75b333
|
||||
1
python/cic_contracts/data/Locator.json
Normal file
1
python/cic_contracts/data/Locator.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Minter.interface
Normal file
1
python/cic_contracts/data/Minter.interface
Normal file
@@ -0,0 +1 @@
|
||||
5878bcf4
|
||||
1
python/cic_contracts/data/Minter.json
Normal file
1
python/cic_contracts/data/Minter.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Msg.interface
Normal file
1
python/cic_contracts/data/Msg.interface
Normal file
@@ -0,0 +1 @@
|
||||
a3002595
|
||||
1
python/cic_contracts/data/Msg.json
Normal file
1
python/cic_contracts/data/Msg.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/MultiHash.interface
Normal file
1
python/cic_contracts/data/MultiHash.interface
Normal file
@@ -0,0 +1 @@
|
||||
cd8391b0
|
||||
1
python/cic_contracts/data/MultiHash.json
Normal file
1
python/cic_contracts/data/MultiHash.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Offline.interface
Normal file
1
python/cic_contracts/data/Offline.interface
Normal file
@@ -0,0 +1 @@
|
||||
52e86958
|
||||
1
python/cic_contracts/data/Offline.json
Normal file
1
python/cic_contracts/data/Offline.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/OwnedAccepter.interface
Normal file
1
python/cic_contracts/data/OwnedAccepter.interface
Normal file
@@ -0,0 +1 @@
|
||||
37a47be4
|
||||
1
python/cic_contracts/data/OwnedAccepter.json
Normal file
1
python/cic_contracts/data/OwnedAccepter.json
Normal file
@@ -0,0 +1 @@
|
||||
[{"inputs":[],"name":"acceptOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
|
||||
1
python/cic_contracts/data/OwnedTaker.interface
Normal file
1
python/cic_contracts/data/OwnedTaker.interface
Normal file
@@ -0,0 +1 @@
|
||||
6b578339
|
||||
1
python/cic_contracts/data/OwnedTaker.json
Normal file
1
python/cic_contracts/data/OwnedTaker.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Registry.interface
Normal file
1
python/cic_contracts/data/Registry.interface
Normal file
@@ -0,0 +1 @@
|
||||
d719b0cc
|
||||
1
python/cic_contracts/data/Registry.json
Normal file
1
python/cic_contracts/data/Registry.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/RegistryClient.interface
Normal file
1
python/cic_contracts/data/RegistryClient.interface
Normal file
@@ -0,0 +1 @@
|
||||
effbf671
|
||||
1
python/cic_contracts/data/RegistryClient.json
Normal file
1
python/cic_contracts/data/RegistryClient.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Seal.interface
Normal file
1
python/cic_contracts/data/Seal.interface
Normal file
@@ -0,0 +1 @@
|
||||
0d7491f8
|
||||
1
python/cic_contracts/data/Seal.json
Normal file
1
python/cic_contracts/data/Seal.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/TokenVend.interface
Normal file
1
python/cic_contracts/data/TokenVend.interface
Normal file
@@ -0,0 +1 @@
|
||||
8a13249c
|
||||
1
python/cic_contracts/data/TokenVend.json
Normal file
1
python/cic_contracts/data/TokenVend.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/TokenVote.interface
Normal file
1
python/cic_contracts/data/TokenVote.interface
Normal file
@@ -0,0 +1 @@
|
||||
ac3142f7
|
||||
1
python/cic_contracts/data/TokenVote.json
Normal file
1
python/cic_contracts/data/TokenVote.json
Normal file
@@ -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"}]
|
||||
1
python/cic_contracts/data/Writer.interface
Normal file
1
python/cic_contracts/data/Writer.interface
Normal file
@@ -0,0 +1 @@
|
||||
abe1f1f5
|
||||
1
python/cic_contracts/data/Writer.json
Normal file
1
python/cic_contracts/data/Writer.json
Normal file
@@ -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"}]
|
||||
4
python/cic_contracts/data/__init__.py
Normal file
4
python/cic_contracts/data/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
# standard imports
|
||||
import os
|
||||
|
||||
data_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
10
python/cic_contracts/names.py
Normal file
10
python/cic_contracts/names.py
Normal 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"
|
||||
16
python/cic_contracts/search.py
Normal file
16
python/cic_contracts/search.py
Normal file
@@ -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()
|
||||
17
python/cic_contracts/unittest/__init__.py
Normal file
17
python/cic_contracts/unittest/__init__.py
Normal file
@@ -0,0 +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):
|
||||
if isinstance(v, Name):
|
||||
v = v.value
|
||||
return search(v + 'Test', ext='bin', search_dir=contracts_dir)
|
||||
|
||||
|
||||
22
python/cic_contracts/unittest/owned.py
Normal file
22
python/cic_contracts/unittest/owned.py
Normal file
@@ -0,0 +1,22 @@
|
||||
# external imports
|
||||
from hexathon import strip_0x
|
||||
from hexathon import same as same_hex
|
||||
from chainlib.eth.nonce import RPCNonceOracle
|
||||
from chainlib.eth.address import to_checksum_address
|
||||
from eth_owned import Owned
|
||||
|
||||
|
||||
class TestInterface:
|
||||
|
||||
def __owned_check(self):
|
||||
self.owner == to_checksum_address(self.owner)
|
||||
|
||||
|
||||
def test_owner(self):
|
||||
self.__owned_check()
|
||||
|
||||
c = Owned(self.chain_spec)
|
||||
o = c.owner(self.address, sender_address=self.accounts[0])
|
||||
r = self.rpc.do(o)
|
||||
owner_address = c.parse_owner(r)
|
||||
self.assertTrue(same_hex(self.owner, owner_address))
|
||||
@@ -1 +1 @@
|
||||
608060405234801561001057600080fd5b5060405161070438038061070483398181016040528101906100329190610081565b8060008190555080600281905550506100ae565b600080fd5b6000819050919050565b61005e8161004b565b811461006957600080fd5b50565b60008151905061007b81610055565b92915050565b60006020828403121561009757610096610046565b5b60006100a58482850161006c565b91505092915050565b610647806100bd6000396000f3fe608060405234801561001057600080fd5b506004361061007f576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a71461008457806342966c68146100b457806344d17187146100e457806344df8e7014610100578063a2309ff81461011e578063d89135cd1461013c575b600080fd5b61009e60048036038101906100999190610353565b61015a565b6040516100ab919061039b565b60405180910390f35b6100ce60048036038101906100c991906103ec565b61020a565b6040516100db919061039b565b60405180910390f35b6100fe60048036038101906100f991906104dc565b61021f565b005b61010861022f565b604051610115919061055f565b60405180910390f35b610126610241565b604051610133919061055f565b60405180910390f35b610144610247565b604051610151919061055f565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101ae5760019050610205565b63bc4babdd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036102005760019050610205565b600090505b919050565b60006102158261024d565b5060019050919050565b6102288361020a565b5050505050565b600061023c60005461024d565b905090565b60005481565b60015481565b6000808260025461025e91906105a9565b101561026957600080fd5b816001600082825461027b91906105dd565b92505081905550816002600082825461029491906105a9565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516102e1919061055f565b60405180910390a2819050919050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610330816102fb565b811461033b57600080fd5b50565b60008135905061034d81610327565b92915050565b600060208284031215610369576103686102f1565b5b60006103778482850161033e565b91505092915050565b60008115159050919050565b61039581610380565b82525050565b60006020820190506103b0600083018461038c565b92915050565b6000819050919050565b6103c9816103b6565b81146103d457600080fd5b50565b6000813590506103e6816103c0565b92915050565b600060208284031215610402576104016102f1565b5b6000610410848285016103d7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061044482610419565b9050919050565b61045481610439565b811461045f57600080fd5b50565b6000813590506104718161044b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261049c5761049b610477565b5b8235905067ffffffffffffffff8111156104b9576104b861047c565b5b6020830191508360018202830111156104d5576104d4610481565b5b9250929050565b600080600080606085870312156104f6576104f56102f1565b5b600061050487828801610462565b9450506020610515878288016103d7565b935050604085013567ffffffffffffffff811115610536576105356102f6565b5b61054287828801610486565b925092505092959194509250565b610559816103b6565b82525050565b60006020820190506105746000830184610550565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006105b4826103b6565b91506105bf836103b6565b92508282039050818111156105d7576105d661057a565b5b92915050565b60006105e8826103b6565b91506105f3836103b6565b925082820190508082111561060b5761060a61057a565b5b9291505056fea2646970667358221220cf04ca2f9a9ef1aee6a7109799862035ae01e772554ee9c71f0ca5243159197164736f6c63430008130033
|
||||
608060405234801561001057600080fd5b5060405161070438038061070483398181016040528101906100329190610081565b8060008190555080600281905550506100ae565b600080fd5b6000819050919050565b61005e8161004b565b811461006957600080fd5b50565b60008151905061007b81610055565b92915050565b60006020828403121561009757610096610046565b5b60006100a58482850161006c565b91505092915050565b610647806100bd6000396000f3fe608060405234801561001057600080fd5b506004361061007f576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a71461008457806342966c68146100b457806344d17187146100e457806344df8e7014610100578063a2309ff81461011e578063d89135cd1461013c575b600080fd5b61009e60048036038101906100999190610353565b61015a565b6040516100ab919061039b565b60405180910390f35b6100ce60048036038101906100c991906103ec565b61020a565b6040516100db919061039b565b60405180910390f35b6100fe60048036038101906100f991906104dc565b61021f565b005b61010861022f565b604051610115919061055f565b60405180910390f35b610126610241565b604051610133919061055f565b60405180910390f35b610144610247565b604051610151919061055f565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101ae5760019050610205565b63bc4babdd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036102005760019050610205565b600090505b919050565b60006102158261024d565b5060019050919050565b6102288361020a565b5050505050565b600061023c60005461024d565b905090565b60005481565b60015481565b6000808260025461025e91906105a9565b101561026957600080fd5b816001600082825461027b91906105dd565b92505081905550816002600082825461029491906105a9565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516102e1919061055f565b60405180910390a2819050919050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610330816102fb565b811461033b57600080fd5b50565b60008135905061034d81610327565b92915050565b600060208284031215610369576103686102f1565b5b60006103778482850161033e565b91505092915050565b60008115159050919050565b61039581610380565b82525050565b60006020820190506103b0600083018461038c565b92915050565b6000819050919050565b6103c9816103b6565b81146103d457600080fd5b50565b6000813590506103e6816103c0565b92915050565b600060208284031215610402576104016102f1565b5b6000610410848285016103d7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061044482610419565b9050919050565b61045481610439565b811461045f57600080fd5b50565b6000813590506104718161044b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261049c5761049b610477565b5b8235905067ffffffffffffffff8111156104b9576104b861047c565b5b6020830191508360018202830111156104d5576104d4610481565b5b9250929050565b600080600080606085870312156104f6576104f56102f1565b5b600061050487828801610462565b9450506020610515878288016103d7565b935050604085013567ffffffffffffffff811115610536576105356102f6565b5b61054287828801610486565b925092505092959194509250565b610559816103b6565b82525050565b60006020820190506105746000830184610550565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006105b4826103b6565b91506105bf836103b6565b92508282039050818111156105d7576105d661057a565b5b92915050565b60006105e8826103b6565b91506105f3836103b6565b925082820190508082111561060b5761060a61057a565b5b9291505056fea26469706673582212208cc8e912e94a09c49f6772a6a0bfcea389d65478dcee0b3e12fa669028b5567e64736f6c63430008130033
|
||||
@@ -1 +1 @@
|
||||
608060405234801561001057600080fd5b506040516104003803806104008339818101604052810190610032919061007a565b80600081905550506100a7565b600080fd5b6000819050919050565b61005781610044565b811461006257600080fd5b50565b6000815190506100748161004e565b92915050565b6000602082840312156100905761008f61003f565b5b600061009e84828501610065565b91505092915050565b61034a806100b66000396000f3fe608060405234801561001057600080fd5b506004361061005e576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a7146100635780636f8b44b014610093578063d5abeb01146100af575b600080fd5b61007d60048036038101906100789190610224565b6100cd565b60405161008a919061026c565b60405180910390f35b6100ad60048036038101906100a891906102bd565b61017d565b005b6100b76101c1565b6040516100c491906102f9565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101215760019050610178565b63869f75947c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101735760019050610178565b600090505b919050565b6000547f9722adea12ab7ef86fc45b88f0e0b567639e8dddaae60261e08c03d747fbbfe6826040516101af91906102f9565b60405180910390a28060008190555050565b60005481565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610201816101cc565b811461020c57600080fd5b50565b60008135905061021e816101f8565b92915050565b60006020828403121561023a576102396101c7565b5b60006102488482850161020f565b91505092915050565b60008115159050919050565b61026681610251565b82525050565b6000602082019050610281600083018461025d565b92915050565b6000819050919050565b61029a81610287565b81146102a557600080fd5b50565b6000813590506102b781610291565b92915050565b6000602082840312156102d3576102d26101c7565b5b60006102e1848285016102a8565b91505092915050565b6102f381610287565b82525050565b600060208201905061030e60008301846102ea565b9291505056fea2646970667358221220f6bc26e7c6827142ccee8c0cadc8cb76d33712a68eacd67b69e4f8108aa2b59064736f6c63430008130033
|
||||
608060405234801561001057600080fd5b506040516104003803806104008339818101604052810190610032919061007a565b80600081905550506100a7565b600080fd5b6000819050919050565b61005781610044565b811461006257600080fd5b50565b6000815190506100748161004e565b92915050565b6000602082840312156100905761008f61003f565b5b600061009e84828501610065565b91505092915050565b61034a806100b66000396000f3fe608060405234801561001057600080fd5b506004361061005e576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a7146100635780636f8b44b014610093578063d5abeb01146100af575b600080fd5b61007d60048036038101906100789190610224565b6100cd565b60405161008a919061026c565b60405180910390f35b6100ad60048036038101906100a891906102bd565b61017d565b005b6100b76101c1565b6040516100c491906102f9565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101215760019050610178565b63869f75947c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101735760019050610178565b600090505b919050565b6000547f9722adea12ab7ef86fc45b88f0e0b567639e8dddaae60261e08c03d747fbbfe6826040516101af91906102f9565b60405180910390a28060008190555050565b60005481565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610201816101cc565b811461020c57600080fd5b50565b60008135905061021e816101f8565b92915050565b60006020828403121561023a576102396101c7565b5b60006102488482850161020f565b91505092915050565b60008115159050919050565b61026681610251565b82525050565b6000602082019050610281600083018461025d565b92915050565b6000819050919050565b61029a81610287565b81146102a557600080fd5b50565b6000813590506102b781610291565b92915050565b6000602082840312156102d3576102d26101c7565b5b60006102e1848285016102a8565b91505092915050565b6102f381610287565b82525050565b600060208201905061030e60008301846102ea565b9291505056fea26469706673582212202fae6928974c7d7b0aa39737c7a191972db33126d9966e893091aac145fd34c864736f6c63430008130033
|
||||
1
python/cic_contracts/unittest/solidity/ExpireTest.bin
Normal file
1
python/cic_contracts/unittest/solidity/ExpireTest.bin
Normal file
@@ -0,0 +1 @@
|
||||
608060405234801561001057600080fd5b506040516105143803806105148339818101604052810190610032919061007a565b80600081905550506100a7565b600080fd5b6000819050919050565b61005781610044565b811461006257600080fd5b50565b6000815190506100748161004e565b92915050565b6000602082840312156100905761008f61003f565b5b600061009e84828501610065565b91505092915050565b61045e806100b66000396000f3fe608060405234801561001057600080fd5b5060043610610069576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a71461006e57806332c270521461009e5780635f408c04146100ba578063b1cb0db3146100d8575b600080fd5b61008860048036038101906100839190610301565b6100f6565b6040516100959190610349565b60405180910390f35b6100b860048036038101906100b3919061039a565b6101a6565b005b6100c2610212565b6040516100cf91906103e3565b60405180910390f35b6100e061029e565b6040516100ed919061040d565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361014a57600190506101a1565b63841a0e947c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361019c57600190506101a1565b600090505b919050565b600160009054906101000a900460ff16156101c057600080fd5b60005481116101ce57600080fd5b6000547ff5bd6cb27a0006b5ea8618058a0d84719695cb6d984f4840bc1a54ca12ae4b7c82604051610200919061040d565b60405180910390a28060008190555050565b6000600160009054906101000a900460ff1615610232576001905061029b565b600054421015610245576000905061029b565b60018060006101000a81548160ff0219169083151502179055507ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe94260405161028e919061040d565b60405180910390a1600190505b90565b60005481565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6102de816102a9565b81146102e957600080fd5b50565b6000813590506102fb816102d5565b92915050565b600060208284031215610317576103166102a4565b5b6000610325848285016102ec565b91505092915050565b60008115159050919050565b6103438161032e565b82525050565b600060208201905061035e600083018461033a565b92915050565b6000819050919050565b61037781610364565b811461038257600080fd5b50565b6000813590506103948161036e565b92915050565b6000602082840312156103b0576103af6102a4565b5b60006103be84828501610385565b91505092915050565b600060ff82169050919050565b6103dd816103c7565b82525050565b60006020820190506103f860008301846103d4565b92915050565b61040781610364565b82525050565b600060208201905061042260008301846103fe565b9291505056fea2646970667358221220b63ea2baf0ead38ab1ac33ec6425843f8242d5428057e132d8a123fc1846f25564736f6c63430008130033
|
||||
@@ -15,7 +15,7 @@ contract ExpireTest {
|
||||
expires = _timestamp;
|
||||
}
|
||||
|
||||
function setExpiry(uint256 _timestamp) public {
|
||||
function setExpire(uint256 _timestamp) public {
|
||||
require(!expired);
|
||||
require(_timestamp > expires);
|
||||
emit ExpiryChange(expires, _timestamp);
|
||||
@@ -1 +1 @@
|
||||
608060405234801561001057600080fd5b50610653806100206000396000f3fe608060405234801561001057600080fd5b5060043610610074576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a714610079578063449a52f8146100a95780638832e6e3146100d957806394d008ef146100f5578063e3d670d714610111575b600080fd5b610093600480360381019061008e9190610353565b610141565b6040516100a0919061039b565b60405180910390f35b6100c360048036038101906100be919061044a565b6101f1565b6040516100d0919061039b565b60405180910390f35b6100f360048036038101906100ee91906104ef565b6102b7565b005b61010f600480360381019061010a91906104ef565b6102c8565b005b61012b60048036038101906101269190610563565b6102d9565b604051610138919061059f565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361019557600190506101ec565b635878bcf47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101e757600190506101ec565b600090505b919050565b6000816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461024191906105e9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8846040516102a5919061059f565b60405180910390a36001905092915050565b6102c184846101f1565b5050505050565b6102d284846101f1565b5050505050565b60006020528060005260406000206000915090505481565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610330816102fb565b811461033b57600080fd5b50565b60008135905061034d81610327565b92915050565b600060208284031215610369576103686102f1565b5b60006103778482850161033e565b91505092915050565b60008115159050919050565b61039581610380565b82525050565b60006020820190506103b0600083018461038c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006103e1826103b6565b9050919050565b6103f1816103d6565b81146103fc57600080fd5b50565b60008135905061040e816103e8565b92915050565b6000819050919050565b61042781610414565b811461043257600080fd5b50565b6000813590506104448161041e565b92915050565b60008060408385031215610461576104606102f1565b5b600061046f858286016103ff565b925050602061048085828601610435565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126104af576104ae61048a565b5b8235905067ffffffffffffffff8111156104cc576104cb61048f565b5b6020830191508360018202830111156104e8576104e7610494565b5b9250929050565b60008060008060608587031215610509576105086102f1565b5b6000610517878288016103ff565b945050602061052887828801610435565b935050604085013567ffffffffffffffff811115610549576105486102f6565b5b61055587828801610499565b925092505092959194509250565b600060208284031215610579576105786102f1565b5b6000610587848285016103ff565b91505092915050565b61059981610414565b82525050565b60006020820190506105b46000830184610590565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006105f482610414565b91506105ff83610414565b9250828201905080821115610617576106166105ba565b5b9291505056fea2646970667358221220a5a810b6de36b1154b4b2d37d08d4e8a5fe442c870cd58cdba0d86a13da3dda964736f6c63430008130033
|
||||
608060405234801561001057600080fd5b50610653806100206000396000f3fe608060405234801561001057600080fd5b5060043610610074576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a714610079578063449a52f8146100a95780638832e6e3146100d957806394d008ef146100f5578063e3d670d714610111575b600080fd5b610093600480360381019061008e9190610353565b610141565b6040516100a0919061039b565b60405180910390f35b6100c360048036038101906100be919061044a565b6101f1565b6040516100d0919061039b565b60405180910390f35b6100f360048036038101906100ee91906104ef565b6102b7565b005b61010f600480360381019061010a91906104ef565b6102c8565b005b61012b60048036038101906101269190610563565b6102d9565b604051610138919061059f565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361019557600190506101ec565b635878bcf47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101e757600190506101ec565b600090505b919050565b6000816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461024191906105e9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8846040516102a5919061059f565b60405180910390a36001905092915050565b6102c184846101f1565b5050505050565b6102d284846101f1565b5050505050565b60006020528060005260406000206000915090505481565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610330816102fb565b811461033b57600080fd5b50565b60008135905061034d81610327565b92915050565b600060208284031215610369576103686102f1565b5b60006103778482850161033e565b91505092915050565b60008115159050919050565b61039581610380565b82525050565b60006020820190506103b0600083018461038c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006103e1826103b6565b9050919050565b6103f1816103d6565b81146103fc57600080fd5b50565b60008135905061040e816103e8565b92915050565b6000819050919050565b61042781610414565b811461043257600080fd5b50565b6000813590506104448161041e565b92915050565b60008060408385031215610461576104606102f1565b5b600061046f858286016103ff565b925050602061048085828601610435565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126104af576104ae61048a565b5b8235905067ffffffffffffffff8111156104cc576104cb61048f565b5b6020830191508360018202830111156104e8576104e7610494565b5b9250929050565b60008060008060608587031215610509576105086102f1565b5b6000610517878288016103ff565b945050602061052887828801610435565b935050604085013567ffffffffffffffff811115610549576105486102f6565b5b61055587828801610499565b925092505092959194509250565b600060208284031215610579576105786102f1565b5b6000610587848285016103ff565b91505092915050565b61059981610414565b82525050565b60006020820190506105b46000830184610590565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006105f482610414565b91506105ff83610414565b9250828201905080821115610617576106166105ba565b5b9291505056fea2646970667358221220c34bf6d363f42169041e40ea19aaa4d82e75186dffd29b11557323de4adfbad564736f6c63430008130033
|
||||
1
python/cic_contracts/unittest/solidity/SealTest.bin
Normal file
1
python/cic_contracts/unittest/solidity/SealTest.bin
Normal file
@@ -0,0 +1 @@
|
||||
6080604052600760015534801561001557600080fd5b50610357806100256000396000f3fe608060405234801561001057600080fd5b5060043610610069576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a71461006e57806318cbbcfc1461009e57806331a5995d146100bc57806386fe212d146100da575b600080fd5b61008860048036038101906100839190610231565b6100f6565b6040516100959190610279565b60405180910390f35b6100a66101a6565b6040516100b391906102ad565b60405180910390f35b6100c46101ac565b6040516100d191906102ad565b60405180910390f35b6100f460048036038101906100ef91906102f4565b6101b2565b005b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361014a57600190506101a1565b630d7491f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361019c57600190506101a1565b600090505b919050565b60015481565b60005481565b600154600054106101c257600080fd5b80600080828254179250508190555050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61020e816101d9565b811461021957600080fd5b50565b60008135905061022b81610205565b92915050565b600060208284031215610247576102466101d4565b5b60006102558482850161021c565b91505092915050565b60008115159050919050565b6102738161025e565b82525050565b600060208201905061028e600083018461026a565b92915050565b6000819050919050565b6102a781610294565b82525050565b60006020820190506102c2600083018461029e565b92915050565b6102d181610294565b81146102dc57600080fd5b50565b6000813590506102ee816102c8565b92915050565b60006020828403121561030a576103096101d4565b5b6000610318848285016102df565b9150509291505056fea2646970667358221220eb9a297000efc4353967bd2b081f2209f60e2f28952208509dad9c63d64e06ae64736f6c63430008130033
|
||||
@@ -9,7 +9,7 @@ contract SealTest {
|
||||
uint256 public maxSealState = 7;
|
||||
|
||||
function seal(uint256 _bits) public {
|
||||
require(_bits < maxSealState);
|
||||
require(sealState < maxSealState);
|
||||
sealState |= _bits;
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
608060405234801561001057600080fd5b506104da806100206000396000f3fe608060405234801561001057600080fd5b5060043610610069576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a71461006e5780632b29ba231461009e5780635ae06f7e146100ce578063da2824a8146100fe575b600080fd5b6100886004803603810190610083919061038c565b61012e565b60405161009591906103d4565b60405180910390f35b6100b860048036038101906100b3919061044d565b6101de565b6040516100c591906103d4565b60405180910390f35b6100e860048036038101906100e3919061044d565b6101fe565b6040516100f591906103d4565b60405180910390f35b6101186004803603810190610113919061044d565b610296565b60405161012591906103d4565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361018257600190506101d9565b63abe1f1f57c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101d457600190506101d9565b600090505b919050565b60006020528060005260406000206000915054906101000a900460ff1681565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9002f14780245e47491e7a2caae4712e7cea2e298e4e76c6916845145b90a51c826040516102859190610489565b60405180910390a160019050919050565b600060016000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e8260405161031e9190610489565b60405180910390a160019050919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61036981610334565b811461037457600080fd5b50565b60008135905061038681610360565b92915050565b6000602082840312156103a2576103a161032f565b5b60006103b084828501610377565b91505092915050565b60008115159050919050565b6103ce816103b9565b82525050565b60006020820190506103e960008301846103c5565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061041a826103ef565b9050919050565b61042a8161040f565b811461043557600080fd5b50565b60008135905061044781610421565b92915050565b6000602082840312156104635761046261032f565b5b600061047184828501610438565b91505092915050565b6104838161040f565b82525050565b600060208201905061049e600083018461047a565b9291505056fea26469706673582212206bef2d3402160122da272241da7b2729136d4bc1e4399f01ddd8c8a7d3b93cdd64736f6c63430008130033
|
||||
608060405234801561001057600080fd5b506104da806100206000396000f3fe608060405234801561001057600080fd5b5060043610610069576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a71461006e5780632b29ba231461009e5780635ae06f7e146100ce578063da2824a8146100fe575b600080fd5b6100886004803603810190610083919061038c565b61012e565b60405161009591906103d4565b60405180910390f35b6100b860048036038101906100b3919061044d565b6101de565b6040516100c591906103d4565b60405180910390f35b6100e860048036038101906100e3919061044d565b6101fe565b6040516100f591906103d4565b60405180910390f35b6101186004803603810190610113919061044d565b610296565b60405161012591906103d4565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361018257600190506101d9565b63abe1f1f57c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101d457600190506101d9565b600090505b919050565b60006020528060005260406000206000915054906101000a900460ff1681565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9002f14780245e47491e7a2caae4712e7cea2e298e4e76c6916845145b90a51c826040516102859190610489565b60405180910390a160019050919050565b600060016000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e8260405161031e9190610489565b60405180910390a160019050919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61036981610334565b811461037457600080fd5b50565b60008135905061038681610360565b92915050565b6000602082840312156103a2576103a161032f565b5b60006103b084828501610377565b91505092915050565b60008115159050919050565b6103ce816103b9565b82525050565b60006020820190506103e960008301846103c5565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061041a826103ef565b9050919050565b61042a8161040f565b811461043557600080fd5b50565b60008135905061044781610421565b92915050565b6000602082840312156104635761046261032f565b5b600061047184828501610438565b91505092915050565b6104838161040f565b82525050565b600060208201905061049e600083018461047a565b9291505056fea264697066735822122020b67ff87e5eb051bb72e8e0a6d713bfca71e048393fa9cf2024224ab72bf93164736f6c63430008130033
|
||||
@@ -12,13 +12,12 @@ from chainlib.eth.tx import TxFactory
|
||||
from chainlib.eth.tx import TxFormat
|
||||
from chainlib.eth.contract import ABIContractEncoder
|
||||
from chainlib.eth.contract import ABIContractType
|
||||
from cic_contracts.unittest import bytecode
|
||||
from cic_contracts import Name
|
||||
|
||||
# local imports
|
||||
from eth_burner import EthBurner
|
||||
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
contract_dir = os.path.join(script_dir, '..', '..', 'solidity')
|
||||
|
||||
logg = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -30,9 +29,7 @@ class TestEthBurner(EthTesterCase):
|
||||
self.conn = RPCConnection.connect(self.chain_spec, 'default')
|
||||
nonce_oracle = RPCNonceOracle(self.accounts[0], self.conn)
|
||||
|
||||
f = open(os.path.join(contract_dir, 'BurnerTest.bin'))
|
||||
code = f.read()
|
||||
f.close()
|
||||
code = bytecode(Name.BURNER)
|
||||
|
||||
txf = TxFactory(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
|
||||
tx = txf.template(self.accounts[0], None, use_nonce=True)
|
||||
|
||||
@@ -16,4 +16,4 @@ class TestEthBurnerInterface:
|
||||
self.rpc.do(o)
|
||||
o = receipt(tx_hash)
|
||||
r = self.rpc.do(o)
|
||||
self.assertEqual(r['status'],1)
|
||||
self.assertEqual(r['status'], 1)
|
||||
|
||||
@@ -11,9 +11,8 @@ from chainlib.eth.tx import TxFactory
|
||||
from chainlib.eth.tx import TxFormat
|
||||
from chainlib.eth.contract import ABIContractEncoder
|
||||
from chainlib.eth.contract import ABIContractType
|
||||
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
contract_dir = os.path.join(script_dir, '..', '..', 'solidity')
|
||||
from cic_contracts.unittest import bytecode
|
||||
from cic_contracts import Name
|
||||
|
||||
logg = logging.getLogger(__name__)
|
||||
|
||||
@@ -28,14 +27,14 @@ class TestEthCapped(EthTesterCase):
|
||||
self.conn = RPCConnection.connect(self.chain_spec, 'default')
|
||||
nonce_oracle = RPCNonceOracle(self.accounts[0], self.conn)
|
||||
|
||||
f = open(os.path.join(contract_dir, 'CappedTest.bin'))
|
||||
code = f.read()
|
||||
f.close()
|
||||
code = bytecode(Name.CAPPED)
|
||||
|
||||
txf = TxFactory(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
|
||||
tx = txf.template(self.accounts[0], None, use_nonce=True)
|
||||
|
||||
self.max_supply_value = 1024
|
||||
if getattr(self, 'max_supply_value', None) == None:
|
||||
self.max_supply_value = 1024
|
||||
|
||||
enc = ABIContractEncoder()
|
||||
enc.uint256(self.max_supply_value)
|
||||
args = enc.get()
|
||||
|
||||
@@ -12,7 +12,7 @@ class TestEthCappedInterface:
|
||||
self.max_supply_value = 0
|
||||
|
||||
|
||||
def test_supply(self):
|
||||
def test_default_supply(self):
|
||||
if self.max_supply_value == 0:
|
||||
return
|
||||
c = EthCapped(self.chain_spec)
|
||||
@@ -25,7 +25,7 @@ class TestEthCappedInterface:
|
||||
if self.set_method == None:
|
||||
return
|
||||
|
||||
self.max_supply_value = 2048
|
||||
self.max_supply_value *= 2
|
||||
(tx_hash_hex, o) = self.set_method(self.address, self.accounts[0], self.max_supply_value)
|
||||
self.rpc.do(o)
|
||||
o = receipt(tx_hash_hex)
|
||||
|
||||
@@ -12,6 +12,8 @@ from chainlib.eth.tx import TxFactory
|
||||
from chainlib.eth.tx import TxFormat
|
||||
from chainlib.eth.contract import ABIContractEncoder
|
||||
from chainlib.eth.contract import ABIContractType
|
||||
from cic_contracts.unittest import bytecode
|
||||
from cic_contracts import Name
|
||||
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
contract_dir = os.path.join(script_dir, '..', '..', 'solidity')
|
||||
@@ -27,17 +29,15 @@ class TestEthExpire(EthTesterCase):
|
||||
self.conn = RPCConnection.connect(self.chain_spec, 'default')
|
||||
nonce_oracle = RPCNonceOracle(self.accounts[0], self.conn)
|
||||
|
||||
f = open(os.path.join(contract_dir, 'ExpireTest.bin'))
|
||||
code = f.read()
|
||||
f.close()
|
||||
code = bytecode(Name.EXPIRE)
|
||||
|
||||
txf = TxFactory(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
|
||||
tx = txf.template(self.accounts[0], None, use_nonce=True)
|
||||
|
||||
date_expire = datetime.datetime.utcnow() + datetime.timedelta(seconds=10000)
|
||||
self.expire = int(date_expire.timestamp())
|
||||
self.expire_value = int(date_expire.timestamp())
|
||||
enc = ABIContractEncoder()
|
||||
enc.uint256(self.expire)
|
||||
enc.uint256(self.expire_value)
|
||||
args = enc.get()
|
||||
|
||||
tx = txf.set_code(tx, code + args)
|
||||
@@ -50,11 +50,11 @@ class TestEthExpire(EthTesterCase):
|
||||
logg.debug('published expire test contract with hash {}'.format(r))
|
||||
|
||||
|
||||
def set_expiry(self, contract_address, sender_address, v, tx_format=TxFormat.JSONRPC):
|
||||
def set_expire(self, contract_address, sender_address, v, tx_format=TxFormat.JSONRPC):
|
||||
nonce_oracle = RPCNonceOracle(self.accounts[0], self.conn)
|
||||
txf = TxFactory(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
|
||||
enc = ABIContractEncoder()
|
||||
enc.method('setExpiry')
|
||||
enc.method('setExpire')
|
||||
enc.typ(ABIContractType.UINT256)
|
||||
enc.uint256(v)
|
||||
data = enc.get()
|
||||
|
||||
@@ -12,20 +12,20 @@ class TestEthExpireInterface:
|
||||
|
||||
|
||||
def test_expire(self):
|
||||
if self.expire == 0:
|
||||
if self.expire_value == 0:
|
||||
return
|
||||
c = EthExpire(self.chain_spec)
|
||||
o = c.expires(self.address, sender_address=self.accounts[0])
|
||||
r = self.rpc.do(o)
|
||||
self.assertEqual(self.expire, int(r, 16))
|
||||
self.assertEqual(self.expire_value, int(r, 16))
|
||||
|
||||
|
||||
def test_expire_change(self):
|
||||
if self.set_method == None:
|
||||
return
|
||||
|
||||
self.expire += 43200
|
||||
(tx_hash_hex, o) = self.set_method(self.address, self.accounts[0], self.expire)
|
||||
self.expire_value += 43200
|
||||
(tx_hash_hex, o) = self.set_method(self.address, self.accounts[0], self.expire_value)
|
||||
self.rpc.do(o)
|
||||
o = receipt(tx_hash_hex)
|
||||
r = self.conn.do(o)
|
||||
@@ -34,4 +34,4 @@ class TestEthExpireInterface:
|
||||
c = EthExpire(self.chain_spec)
|
||||
o = c.expires(self.address, sender_address=self.accounts[0])
|
||||
r = self.rpc.do(o)
|
||||
self.assertEqual(self.expire, int(r, 16))
|
||||
self.assertEqual(self.expire_value, int(r, 16))
|
||||
|
||||
@@ -12,6 +12,8 @@ from chainlib.eth.tx import TxFactory
|
||||
from chainlib.eth.tx import TxFormat
|
||||
from chainlib.eth.contract import ABIContractEncoder
|
||||
from chainlib.eth.contract import ABIContractType
|
||||
from cic_contracts.unittest import bytecode
|
||||
from cic_contracts import Name
|
||||
|
||||
# local imports
|
||||
from eth_minter import EthMinter
|
||||
@@ -30,9 +32,7 @@ class TestEthMinter(EthTesterCase):
|
||||
self.conn = RPCConnection.connect(self.chain_spec, 'default')
|
||||
nonce_oracle = RPCNonceOracle(self.accounts[0], self.conn)
|
||||
|
||||
f = open(os.path.join(contract_dir, 'MinterTest.bin'))
|
||||
code = f.read()
|
||||
f.close()
|
||||
code = bytecode(Name.MINTER)
|
||||
|
||||
txf = TxFactory(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
|
||||
tx = txf.template(self.accounts[0], None, use_nonce=True)
|
||||
|
||||
@@ -11,6 +11,8 @@ from chainlib.eth.tx import TxFactory
|
||||
from chainlib.eth.tx import TxFormat
|
||||
from chainlib.eth.contract import ABIContractEncoder
|
||||
from chainlib.eth.contract import ABIContractType
|
||||
from cic_contracts.unittest import bytecode
|
||||
from cic_contracts import Name
|
||||
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
contract_dir = os.path.join(script_dir, '..', '..', 'solidity')
|
||||
@@ -28,9 +30,7 @@ class TestEthSeal(EthTesterCase):
|
||||
self.conn = RPCConnection.connect(self.chain_spec, 'default')
|
||||
nonce_oracle = RPCNonceOracle(self.accounts[0], self.conn)
|
||||
|
||||
f = open(os.path.join(contract_dir, 'SealTest.bin'))
|
||||
code = f.read()
|
||||
f.close()
|
||||
code = bytecode(Name.SEAL)
|
||||
|
||||
txf = TxFactory(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
|
||||
tx = txf.template(self.accounts[0], None, use_nonce=True)
|
||||
@@ -43,6 +43,7 @@ class TestEthSeal(EthTesterCase):
|
||||
r = self.conn.do(o)
|
||||
self.assertEqual(r['status'], 1)
|
||||
self.address = r['contract_address']
|
||||
self.contracts['seal'] = self.address
|
||||
logg.debug('published seal test contract with hash {}'.format(r))
|
||||
|
||||
|
||||
|
||||
@@ -12,10 +12,28 @@ class TestEthSealInterface:
|
||||
self.max_seal_state = 0
|
||||
|
||||
|
||||
def test_supply(self):
|
||||
def test_default_seal(self):
|
||||
if self.max_seal_state == 0:
|
||||
return
|
||||
c = EthSeal(self.chain_spec)
|
||||
o = c.max_seal_state(self.address, sender_address=self.accounts[0])
|
||||
r = self.rpc.do(o)
|
||||
self.assertEqual(self.max_seal_state, int(r, 16))
|
||||
|
||||
|
||||
def test_seal_set(self):
|
||||
if self.set_method == None:
|
||||
return
|
||||
if self.max_seal_state == 0:
|
||||
return
|
||||
|
||||
(tx_hash, o) = self.set_method(self.contracts['seal'], self.accounts[0], self.max_seal_state)
|
||||
self.rpc.do(o)
|
||||
o = receipt(tx_hash)
|
||||
r = self.rpc.do(o)
|
||||
self.assertEqual(r['status'], 1)
|
||||
|
||||
c = EthSeal(self.chain_spec)
|
||||
o = c.max_seal_state(self.address, sender_address=self.accounts[0])
|
||||
r = self.rpc.do(o)
|
||||
self.assertEqual(self.max_seal_state, int(r, 16))
|
||||
|
||||
@@ -11,6 +11,8 @@ from chainlib.eth.tx import TxFactory
|
||||
from chainlib.eth.tx import TxFormat
|
||||
from chainlib.eth.contract import ABIContractEncoder
|
||||
from chainlib.eth.contract import ABIContractType
|
||||
from cic_contracts.unittest import bytecode
|
||||
from cic_contracts import Name
|
||||
|
||||
# local imports
|
||||
from eth_writer import EthWriter
|
||||
@@ -31,9 +33,7 @@ class TestEthWriter(EthTesterCase):
|
||||
self.conn = RPCConnection.connect(self.chain_spec, 'default')
|
||||
nonce_oracle = RPCNonceOracle(self.accounts[0], self.conn)
|
||||
|
||||
f = open(os.path.join(contract_dir, 'WriterTest.bin'))
|
||||
code = f.read()
|
||||
f.close()
|
||||
code = bytecode(Name.WRITER)
|
||||
|
||||
txf = TxFactory(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
|
||||
tx = txf.template(self.accounts[0], None, use_nonce=True)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[metadata]
|
||||
name = cic-contracts
|
||||
version = 0.3.2
|
||||
version = 0.3.8
|
||||
description = CIC network smart contract interfaces
|
||||
author = Louis Holbrook
|
||||
author_email = dev@holbrook.no
|
||||
@@ -26,9 +26,10 @@ licence_files =
|
||||
|
||||
[options]
|
||||
include_package_data = True
|
||||
python_requires = >= 3.8
|
||||
python_requires = >=3.8,<3.11
|
||||
packages =
|
||||
cic_contracts
|
||||
cic_contracts.data
|
||||
cic_contracts.unittest
|
||||
eth_capped
|
||||
eth_capped.unittest
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
608060405234801561001057600080fd5b506040516105143803806105148339818101604052810190610032919061007a565b80600081905550506100a7565b600080fd5b6000819050919050565b61005781610044565b811461006257600080fd5b50565b6000815190506100748161004e565b92915050565b6000602082840312156100905761008f61003f565b5b600061009e84828501610065565b91505092915050565b61045e806100b66000396000f3fe608060405234801561001057600080fd5b5060043610610069576000357c01000000000000000000000000000000000000000000000000000000009004806301cceb381461006e57806301ffc9a71461008a5780635f408c04146100ba578063b1cb0db3146100d8575b600080fd5b610088600480360381019061008391906102df565b6100f6565b005b6100a4600480360381019061009f9190610364565b610162565b6040516100b191906103ac565b60405180910390f35b6100c2610212565b6040516100cf91906103e3565b60405180910390f35b6100e061029e565b6040516100ed919061040d565b60405180910390f35b600160009054906101000a900460ff161561011057600080fd5b600054811161011e57600080fd5b6000547ff5bd6cb27a0006b5ea8618058a0d84719695cb6d984f4840bc1a54ca12ae4b7c82604051610150919061040d565b60405180910390a28060008190555050565b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101b6576001905061020d565b63841a0e947c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610208576001905061020d565b600090505b919050565b6000600160009054906101000a900460ff1615610232576001905061029b565b600054421015610245576000905061029b565b60018060006101000a81548160ff0219169083151502179055507ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe94260405161028e919061040d565b60405180910390a1600190505b90565b60005481565b600080fd5b6000819050919050565b6102bc816102a9565b81146102c757600080fd5b50565b6000813590506102d9816102b3565b92915050565b6000602082840312156102f5576102f46102a4565b5b6000610303848285016102ca565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6103418161030c565b811461034c57600080fd5b50565b60008135905061035e81610338565b92915050565b60006020828403121561037a576103796102a4565b5b60006103888482850161034f565b91505092915050565b60008115159050919050565b6103a681610391565b82525050565b60006020820190506103c1600083018461039d565b92915050565b600060ff82169050919050565b6103dd816103c7565b82525050565b60006020820190506103f860008301846103d4565b92915050565b610407816102a9565b82525050565b600060208201905061042260008301846103fe565b9291505056fea264697066735822122008d6e0c184036b44d56435108c0e081869b445ea32edbcd7035807691a26a11264736f6c63430008130033
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user