mirror of
git://holbrook.no/eth-address-index
synced 2026-05-19 10:55:20 +02:00
Implement address declarator for token index
This commit is contained in:
@@ -3,7 +3,7 @@ pragma solidity >0.6.11;
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
contract AdccountsIndexAddressDeclarator {
|
||||
contract AccountsIndexAddressDeclarator {
|
||||
|
||||
address public tokenAddress;
|
||||
bytes32 tokenAddressHash;
|
||||
|
||||
@@ -8,9 +8,9 @@ address_declarator:
|
||||
truncate -s -1 AddressDeclarator.bin
|
||||
|
||||
token_index:
|
||||
$(SOLC) TokenUniqueSymbolIndex.sol --abi --evm-version byzantium | awk 'NR>3' > TokenUniqueSymbolIndex.json
|
||||
$(SOLC) TokenUniqueSymbolIndex.sol --bin --evm-version byzantium | awk 'NR>3' > TokenUniqueSymbolIndex.bin
|
||||
truncate -s -1 TokenUniqueSymbolIndex.bin
|
||||
$(SOLC) TokenUniqueSymbolIndexAddressDeclarator.sol --abi --evm-version byzantium | awk 'NR>3' > TokenUniqueSymbolIndexAddressDeclarator.json
|
||||
$(SOLC) TokenUniqueSymbolIndexAddressDeclarator.sol --bin --evm-version byzantium | awk 'NR>3' > TokenUniqueSymbolIndexAddressDeclarator.bin
|
||||
truncate -s -1 TokenUniqueSymbolIndexAddressDeclarator.bin
|
||||
|
||||
|
||||
accounts_index:
|
||||
@@ -24,7 +24,7 @@ accounts_index:
|
||||
|
||||
install: all
|
||||
cp -v AddressDeclarator.{json,bin} ../python/eth_address_declarator/data/
|
||||
cp -v TokenUniqueSymbolIndex.{json,bin} ../python/eth_token_index/data/
|
||||
cp -v TokenUniqueSymbolIndexAddressDeclarator.{json,bin} ../python/eth_address_declarator/data/
|
||||
cp -v AccountsIndexAddressDeclarator.{json,bin} ../python/eth_address_declarator/data/
|
||||
|
||||
.PHONY: test install
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addedAccount","type":"address"},{"indexed":true,"internalType":"uint256","name":"accountIndex","type":"uint256"}],"name":"AddressAdded","type":"event"},{"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":"acceptOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"add","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"addressOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_idx","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"register","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"registry","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
|
||||
[{"inputs":[{"internalType":"address","name":"_addressDeclaratorAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addedAccount","type":"address"},{"indexed":true,"internalType":"uint256","name":"accountIndex","type":"uint256"}],"name":"AddressAdded","type":"event"},{"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":"acceptOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"add","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addressDeclaratorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"addressOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_idx","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"register","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"registry","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
|
||||
|
||||
@@ -2,11 +2,12 @@ pragma solidity >0.6.11;
|
||||
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
contract TokenUniqueSymbolIndex {
|
||||
contract TokenUniqueSymbolIndexAddressDeclarator {
|
||||
|
||||
// EIP 173
|
||||
address public owner;
|
||||
address newOwner;
|
||||
address public addressDeclaratorAddress;
|
||||
|
||||
mapping ( bytes32 => uint256 ) public registry;
|
||||
address[] tokens;
|
||||
@@ -14,8 +15,9 @@ contract TokenUniqueSymbolIndex {
|
||||
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); // EIP173
|
||||
event AddressAdded(address indexed addedAccount, uint256 indexed accountIndex); // AccountsIndex
|
||||
|
||||
constructor() public {
|
||||
constructor(address _addressDeclaratorAddress) public {
|
||||
owner = msg.sender;
|
||||
addressDeclaratorAddress = _addressDeclaratorAddress;
|
||||
tokens.push(address(0));
|
||||
}
|
||||
|
||||
@@ -34,22 +36,30 @@ contract TokenUniqueSymbolIndex {
|
||||
|
||||
function register(address _token) public returns (bool) {
|
||||
require(msg.sender == owner);
|
||||
|
||||
bool ok;
|
||||
bytes memory r;
|
||||
|
||||
bytes memory token_symbol;
|
||||
bytes32 token_symbol_key;
|
||||
uint256 idx;
|
||||
|
||||
(bool _ok, bytes memory _r) = _token.call(abi.encodeWithSignature('symbol()'));
|
||||
require(_ok);
|
||||
(ok, r) = _token.call(abi.encodeWithSignature('symbol()'));
|
||||
require(ok);
|
||||
|
||||
token_symbol = abi.decode(_r, (bytes));
|
||||
token_symbol = abi.decode(r, (bytes));
|
||||
token_symbol_key = sha256(token_symbol);
|
||||
|
||||
(ok, r) = addressDeclaratorAddress.call(abi.encodeWithSignature("addDeclaration(address,bytes32)", _token, token_symbol_key));
|
||||
require(ok);
|
||||
require(r[31] == 0x01);
|
||||
|
||||
idx = registry[token_symbol_key];
|
||||
require(idx == 0);
|
||||
|
||||
registry[token_symbol_key] = tokens.length;
|
||||
tokens.push(_token);
|
||||
|
||||
emit AddressAdded(_token, tokens.length - 1);
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user