Compare commits
10 Commits
lash/bette
...
lash/decla
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cc877c2c44 | ||
|
|
9933979e14
|
||
|
|
5fd512ac69
|
||
|
|
33c230dedf | ||
|
|
21674dc32c | ||
|
|
da7c0ca79e | ||
|
|
0b2c79b4da
|
||
|
|
698ef3a30f
|
||
|
|
6ab91439ad | ||
|
|
a461f9fc55 |
15
Declarator.sol
Normal file
15
Declarator.sol
Normal file
@@ -0,0 +1,15 @@
|
||||
pragma solidity >=0.6.12;
|
||||
|
||||
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
// File-version: 1
|
||||
// Description: The ERC20 standard interface as specified in EIP20 (sha256:9f843cbb25a737c9351b0b6a6f54b86864490d0d5284f6877b4929d481d34312)
|
||||
|
||||
interface AddressDeclarator {
|
||||
function addDeclaration(address _address, bytes32 _proof) external returns ( bytes32 );
|
||||
function declaratorCount(address _objectAddress) external view returns ( uint256 );
|
||||
function declaratorAddressAt(address _targetAddress, uint256 _idx) external view returns ( address );
|
||||
function declaration(address _subjectAddress, address _objectAddress) external view returns ( bytes32[] memory );
|
||||
function declarationCount(address _subjectAddress) external view returns ( uint256 );
|
||||
function declarationAddressAt(address _subjectAddress, uint256 _idx) external view returns ( address );
|
||||
}
|
||||
24
Dockerfile
Normal file
24
Dockerfile
Normal file
@@ -0,0 +1,24 @@
|
||||
FROM ethereum/solc:0.6.12
|
||||
|
||||
# The solc image messes up the alpine environment, so we have to go all over again
|
||||
FROM alpine
|
||||
COPY --from=0 /usr/bin/solc /usr/bin/solc
|
||||
|
||||
RUN apk update && \
|
||||
apk add make
|
||||
|
||||
WORKDIR /usr/src
|
||||
|
||||
COPY ./Makefile ./cic-contracts/Makefile
|
||||
COPY ./*.sol ./cic-contracts/
|
||||
|
||||
RUN cd cic-contracts && \
|
||||
make -B && make install -B
|
||||
|
||||
#RUN mkdir -vp /usr/local/share/cic/solidity && \
|
||||
# cp -rv cic-contracts/abis
|
||||
|
||||
LABEL authors="Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746"
|
||||
LABEL spdx-license-identifier="GPL-3.0-or-later"
|
||||
LABEL description="Ethereum smart contract interfaces used by the CIC component suite"
|
||||
LABEL version="3"
|
||||
3
TokenEndorsement.sol
Normal file
3
TokenEndorsement.sol
Normal file
@@ -0,0 +1,3 @@
|
||||
interface TokenEndorser {
|
||||
function getBySymbol(address _tokenAddress) external view returns ( bytes32 );
|
||||
}
|
||||
18
TokenRegistry.sol
Normal file
18
TokenRegistry.sol
Normal file
@@ -0,0 +1,18 @@
|
||||
pragma solidity >=0.6.12;
|
||||
|
||||
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
// File-version: 1
|
||||
// Description: The ERC20 standard interface as specified in EIP20 (sha256:9f843cbb25a737c9351b0b6a6f54b86864490d0d5284f6877b4929d481d34312)
|
||||
|
||||
|
||||
// TODO: Rename everything to something more generic
|
||||
interface TokenEndorser {
|
||||
function endorsement(bytes32) external view returns ( bytes32 );
|
||||
function tokenIndex(address) external view returns ( uint256 );
|
||||
function endorser(address, uint256) external view returns ( uint256 );
|
||||
function endorserTokenCount(address) external view returns ( uint256 );
|
||||
function tokenSymbolIndex(string memory) external view returns ( address );
|
||||
function tokens(uint256) external view returns ( address );
|
||||
function add(address _token, bytes32 _data) external returns ( bool );
|
||||
}
|
||||
18
TokenRegistryClient.sol
Normal file
18
TokenRegistryClient.sol
Normal file
@@ -0,0 +1,18 @@
|
||||
pragma solidity >=0.6.12;
|
||||
|
||||
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
// File-version: 1
|
||||
// Description: The ERC20 standard interface as specified in EIP20 (sha256:9f843cbb25a737c9351b0b6a6f54b86864490d0d5284f6877b4929d481d34312)
|
||||
|
||||
|
||||
// TODO: Rename everything to something more generic
|
||||
interface TokenEndorser {
|
||||
function endorsement(bytes32) external view returns ( bytes32 );
|
||||
function tokenIndex(address) external view returns ( uint256 );
|
||||
function endorser(address, uint256) external view returns ( uint256 );
|
||||
function endorserTokenCount(address) external view returns ( uint256 );
|
||||
function tokenSymbolIndex(string memory) external view returns ( address );
|
||||
function tokens(uint256) external view returns ( address );
|
||||
function add(address _token, bytes32 _data) external returns ( bool );
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
pragma solidity >=0.6.12;
|
||||
|
||||
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
// File-version: 2
|
||||
|
||||
|
||||
interface TransferApproval {
|
||||
event NewRequest(address indexed _sender, address indexed _recipient, address indexed _token, uint256 _value, uint256 _serial);
|
||||
event NewExecution(uint256 serial);
|
||||
event NewRejection(uint256 serial);
|
||||
event TransferFail(uint256 serial);
|
||||
|
||||
struct Transaction {
|
||||
uint256 serial;
|
||||
address sender;
|
||||
address recipient;
|
||||
address token;
|
||||
uint256 value;
|
||||
}
|
||||
|
||||
function approvers() external view returns (address[] memory);
|
||||
function count() external view returns (uint256);
|
||||
function lastSerial() external view returns (uint256);
|
||||
function nextSerial() external view returns (uint256);
|
||||
function getSerialAt(uint256 _idx) external view returns (uint256);
|
||||
function requests(uint256 _serial) external view returns (Transaction memory);
|
||||
function createRequest(address _recipient, address _token, uint256 _value) external returns (uint256);
|
||||
function executeRequest(uint256 _serial) external returns (bool);
|
||||
function rejectRequest(uint256 _serial) external returns (bool);
|
||||
}
|
||||
48
TransferAuthorization.sol
Normal file
48
TransferAuthorization.sol
Normal file
@@ -0,0 +1,48 @@
|
||||
pragma solidity >=0.6.12;
|
||||
|
||||
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
// File-version: 2
|
||||
|
||||
|
||||
interface TransferAuthorization {
|
||||
|
||||
event NewRequest(address indexed _sender, address indexed _recipient, address indexed _token, uint256 _value, uint256 _serial);
|
||||
event Executed(uint256 _serial);
|
||||
event TransferFail(uint256 _serial);
|
||||
event QuorumSet(uint256 _quorum, uint256 _vetoThreshold, uint256 _signerCount);
|
||||
event SignerAdded(address _signer);
|
||||
event SignerRemoved(address _signer);
|
||||
event Vetoed(uint256 indexed _serial, uint256 _yays, uint256 _nays);
|
||||
event Approved(uint256 indexed _serial, uint256 _yays, uint256 _nays);
|
||||
event Rejected(uint256 indexed _serial, uint256 _yays, uint256 _nays);
|
||||
|
||||
struct Transaction {
|
||||
uint256 serial;
|
||||
address sender;
|
||||
address recipient;
|
||||
address token;
|
||||
uint256 value;
|
||||
uint256 yay;
|
||||
uint256 nay;
|
||||
uint256 blockNumber;
|
||||
int8 result; // -1 rejected/vetoed, 0 = completed, 1 = voting, 2 = approved
|
||||
}
|
||||
|
||||
function signers(address) external view returns (bool);
|
||||
function vote(uint256, address) external view returns (int8);
|
||||
function voters(uint256) external view returns (address);
|
||||
function count() external view returns (uint256);
|
||||
function quorum() external view returns (uint256);
|
||||
function vetoThreshold() external view returns (uint256);
|
||||
function signerCount() external view returns (uint256);
|
||||
function lastSerial() external view returns (uint256);
|
||||
function nextSerial() external view returns (uint256);
|
||||
function getSerialAt(uint256 _idx) external view returns (uint256);
|
||||
function requests(uint256 _serial) external view returns (Transaction memory);
|
||||
function requestSenderIndex(address _sender, uint256 _idx) external view returns (uint256);
|
||||
function requestRecipientIndex(address _recipient, uint256 _idx) external view returns (uint256);
|
||||
function createRequest(address _sender, address _recipient, address _token, uint256 _value) external returns (uint256);
|
||||
function yay(uint256 _serial) external returns (bool);
|
||||
function nay(uint256 _serial) external returns (bool);
|
||||
}
|
||||
1
abis/Declarator.json
Normal file
1
abis/Declarator.json
Normal file
@@ -0,0 +1 @@
|
||||
[{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bytes32","name":"_proof","type":"bytes32"}],"name":"addDeclaration","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_subjectAddress","type":"address"},{"internalType":"address","name":"_objectAddress","type":"address"}],"name":"declaration","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_subjectAddress","type":"address"},{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"declarationAddressAt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_subjectAddress","type":"address"}],"name":"declarationCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_targetAddress","type":"address"},{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"declaratorAddressAt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_objectAddress","type":"address"}],"name":"declaratorCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
|
||||
1
abis/Minter.json
Normal file
1
abis/Minter.json
Normal file
@@ -0,0 +1 @@
|
||||
[{"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"}]
|
||||
1
abis/TokenEndorsement.json
Normal file
1
abis/TokenEndorsement.json
Normal file
@@ -0,0 +1 @@
|
||||
[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"getBySymbol","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]
|
||||
1
abis/TokenRegistry.json
Normal file
1
abis/TokenRegistry.json
Normal file
@@ -0,0 +1 @@
|
||||
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"add","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"endorsement","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"endorser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"endorserTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"tokenSymbolIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
|
||||
1
abis/TokenRegistryClient.json
Normal file
1
abis/TokenRegistryClient.json
Normal file
@@ -0,0 +1 @@
|
||||
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"add","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"endorsement","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"endorser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"endorserTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"tokenSymbolIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
|
||||
@@ -1 +0,0 @@
|
||||
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"serial","type":"uint256"}],"name":"NewExecution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"serial","type":"uint256"}],"name":"NewRejection","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_sender","type":"address"},{"indexed":true,"internalType":"address","name":"_recipient","type":"address"},{"indexed":true,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_serial","type":"uint256"}],"name":"NewRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"serial","type":"uint256"}],"name":"TransferFail","type":"event"},{"inputs":[],"name":"approvers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"createRequest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_serial","type":"uint256"}],"name":"executeRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"getSerialAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSerial","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextSerial","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_serial","type":"uint256"}],"name":"rejectRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_serial","type":"uint256"}],"name":"requests","outputs":[{"components":[{"internalType":"uint256","name":"serial","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct TransferApproval.Transaction","name":"","type":"tuple"}],"stateMutability":"view","type":"function"}]
|
||||
1
abis/TransferAuthorization.json
Normal file
1
abis/TransferAuthorization.json
Normal file
File diff suppressed because one or more lines are too long
16
calculate_erc165.py
Normal file
16
calculate_erc165.py
Normal file
@@ -0,0 +1,16 @@
|
||||
import sys
|
||||
import web3
|
||||
|
||||
f = open(sys.argv[1], 'r')
|
||||
z = b''
|
||||
for i in range(32):
|
||||
z += b'\x00'
|
||||
while True:
|
||||
l = f.readline()
|
||||
if l == '':
|
||||
break
|
||||
print('line {}'.format(l))
|
||||
h = web3.Web3.keccak(text=l)
|
||||
z = bytes([a ^ b for a, b in zip(h, z)])
|
||||
print(h.hex(), z.hex())
|
||||
f.close()
|
||||
44
scripts/registry_list.py
Normal file
44
scripts/registry_list.py
Normal file
@@ -0,0 +1,44 @@
|
||||
import sys
|
||||
|
||||
from chainlib.eth.constant import ZERO_ADDRESS
|
||||
from chainlib.eth.gas import DefaultGasOracle
|
||||
from chainlib.eth.nonce import DefaultNonceOracle
|
||||
from chainlib.eth.tx import TxFactory
|
||||
from chainlib.eth.connection import HTTPConnection
|
||||
from chainlib.eth.hash import keccak256_string_to_hex
|
||||
from chainlib.eth.rpc import jsonrpc_template
|
||||
from chainlib.eth.error import EthException
|
||||
import eth_abi
|
||||
from hexathon import (
|
||||
strip_0x,
|
||||
add_0x,
|
||||
)
|
||||
|
||||
i = 0
|
||||
while True:
|
||||
conn = HTTPConnection('http://localhost:63545')
|
||||
gas_oracle = DefaultGasOracle(conn)
|
||||
nonce_oracle = DefaultNonceOracle(ZERO_ADDRESS, conn)
|
||||
|
||||
# Get Token registry address
|
||||
txf = TxFactory(signer=None, gas_oracle=gas_oracle, nonce_oracle=nonce_oracle, chain_id=8996)
|
||||
tx = txf.template(ZERO_ADDRESS, sys.argv[1])
|
||||
identifiers_method = keccak256_string_to_hex('identifiers(uint256)')[:8]
|
||||
data = add_0x(identifiers_method)
|
||||
data += eth_abi.encode_single('uint256', i).hex()
|
||||
txf.set_code(tx, data)
|
||||
|
||||
o = jsonrpc_template()
|
||||
o['method'] = 'eth_call'
|
||||
tx = txf.normalize(tx)
|
||||
o['params'].append(tx)
|
||||
o['params'].append('latest')
|
||||
try:
|
||||
r = conn.do(o)
|
||||
except EthException:
|
||||
break
|
||||
id_bytes = bytes.fromhex(strip_0x(r))
|
||||
id_str = id_bytes[:id_bytes.find(b'\x00')]
|
||||
print(id_str.decode('utf-8̈́'))
|
||||
i += 1
|
||||
|
||||
Reference in New Issue
Block a user