From f0c10017f4a735bc2cf341fe31a389804ebdc0b8 Mon Sep 17 00:00:00 2001 From: Gerald Bauer Date: Fri, 27 Jan 2023 19:43:09 +0100 Subject: [PATCH] up --- ethname/Manifest.txt | 1 + ethname/config/contracts.2022.csv | 24 +++++ ethname/config/contracts.2023.csv | 10 ++ ethname/lib/ethname.rb | 1 + ethname/lib/ethname/version.rb | 2 +- ethname/sandbox/contractdetails.csv | 26 +++++ ethname/sandbox/helper.rb | 68 +++++++++++++ ethname/sandbox/inbox.csv | 5 + ethname/sandbox/inbox.rb | 97 +++++++++++++++++++ ethname/sandbox/test_names.rb | 39 -------- .../{timeline.rb => timeline_generate.rb} | 74 +------------- ethname/sandbox/timeline_query.rb | 31 ++++++ ethname/test/helper.rb | 7 ++ ethname/test/test_contracts.rb | 63 ++++++++++++ 14 files changed, 336 insertions(+), 112 deletions(-) create mode 100644 ethname/config/contracts.2023.csv create mode 100644 ethname/sandbox/helper.rb create mode 100644 ethname/sandbox/inbox.csv create mode 100644 ethname/sandbox/inbox.rb rename ethname/sandbox/{timeline.rb => timeline_generate.rb} (76%) create mode 100644 ethname/sandbox/timeline_query.rb create mode 100644 ethname/test/helper.rb create mode 100644 ethname/test/test_contracts.rb diff --git a/ethname/Manifest.txt b/ethname/Manifest.txt index ca1d4a7..8633422 100644 --- a/ethname/Manifest.txt +++ b/ethname/Manifest.txt @@ -5,6 +5,7 @@ Rakefile config/contracts.2017.csv config/contracts.2021.csv config/contracts.2022.csv +config/contracts.2023.csv lib/ethname.rb lib/ethname/directory.rb lib/ethname/version.rb diff --git a/ethname/config/contracts.2022.csv b/ethname/config/contracts.2022.csv index 1e1ed93..3b6fafb 100644 --- a/ethname/config/contracts.2022.csv +++ b/ethname/config/contracts.2022.csv @@ -33,3 +33,27 @@ address, names, interfaces, created 0x6229c811d04501523c6058bfaac29c91bb586268, nouns descriptor v2,, 2022-07-14 14:40:29 0x8761b55af5a703d5855f1865db8fe4dd18e94c53, synth nouns | synthetic nouns,, 2022-07-23 11:31:20 + + +0x8ae5523f76a5711fb6bdca1566df3f4707aec1c4, long live kevin | kevin, , 2022-06-22 03:20:35 + +0x82e8129dafb2d5f06aeded321fb04628f95ef654, women, , 2022-08-30 05:51:20 + +0x844da5d5d3c1929229be1d326933307ce29065a8, smiley, , 2022-09-16 00:36:11 +0x139cf58d69779eea2edc9d0000a8f9d186d89bbb, pepitos, , 2022-09-23 23:33:23 + +0x25b4e698bfba060728dee0ca851d536020c79866, peepos, , 2022-10-06 05:58:23 + +0x7915bf033126fa5fcc4dfa79f9bdd5717ed4ce40, mad masks, , 2022-11-05 04:15:11 +0x3b84502df3d36ef2e5318bce5a988460cf349304, teddies, , 2022-11-10 22:58:11 +0x9a7d9b8693339f82d65f315f180faa0a558469bd, dick butts, , 2022-11-10 23:56:23 +0xcd46fce2daf0f2f5129f74b502667e61b15c89f3, people, , 2022-11-16 11:20:59 +0x7c2af580f37c23270dd7c52765073c1601c4ad33, dos phunks, , 2022-11-25 14:19:35 +0x9251dec8df720c2adf3b6f46d968107cbbadf4d4, skulls, , 2022-11-26 05:34:59 + +0xb1bee499b063ee2663b52bfc7a1372296d94e24d, chimps, , 2022-12-04 19:18:47 +0xd8a47f76bdca04d1b959cc70d72ae5539812e931, 3d skulls, , 2022-12-10 07:21:35 +0xe8a9189218ccd5aa20aca3398e2324ab01ef3bfd, cherry nouns, , 2022-12-10 07:59:35 +0xda1d2141154d33cb3b1ce9c87002b07bd24908e9, gatekeepers, , 2022-12-14 02:28:11 +0x6255f0e78c520decccb5356d4f51a3df04149a3d, grimmers, , 2022-12-15 10:57:35 +0x6c1c678428cc3793a53471c9304fc0372594dbbc, smol phunks | 3d phunks, , 2022-12-21 07:30:23 diff --git a/ethname/config/contracts.2023.csv b/ethname/config/contracts.2023.csv new file mode 100644 index 0000000..d225646 --- /dev/null +++ b/ethname/config/contracts.2023.csv @@ -0,0 +1,10 @@ +address, names, interfaces, created +0x22a81c80bb6bf4b797acf08351934b46193bddde, novo | novo punks, , 2023-01-08 04:10:59 +0x897792d16a46f9e70446638bfc6a0d884b741f9b, pepe burb punks, , 2023-01-10 13:36:47 +0x0e10e5e978ba4d1af92eb554cd730c9b97f4e571, pepe blocks, , 2023-01-14 05:37:35 +0x5a8e04a84fb2f6ad4002c824045c7c1bde10cb81, frog central, , 2023-01-17 03:42:35 +0xe302f509c4a3729791215f74299f1fa626396e5a, gm kevin, , 2023-01-19 00:24:35 +0xcce158dd5384b599fc29fe34d83b11ea8fb7a816, death of kevin, , 2023-01-22 12:09:47 +0xb0dc51536e2b4950d7d6667748a6be6fc53c3318, cute kevin, , 2023-01-22 16:29:35 +0x94cb646dd34b3b0ff7c116208f7f7ff7ac216079, ecc0s, , 2023-01-25 12:38:11 +0xe6313d1776e4043d906d5b7221be70cf470f5e87, shiba, , 2023-01-26 02:20:47 diff --git a/ethname/lib/ethname.rb b/ethname/lib/ethname.rb index 7c93f0f..679fa9f 100644 --- a/ethname/lib/ethname.rb +++ b/ethname/lib/ethname.rb @@ -13,6 +13,7 @@ def self.dir @dir ||= Directory.read( "#{root}/config/contracts.2017.csv", "#{root}/config/contracts.2021.csv", "#{root}/config/contracts.2022.csv", + "#{root}/config/contracts.2023.csv", ) end class << self diff --git a/ethname/lib/ethname/version.rb b/ethname/lib/ethname/version.rb index deb5ec2..490496b 100644 --- a/ethname/lib/ethname/version.rb +++ b/ethname/lib/ethname/version.rb @@ -3,7 +3,7 @@ module Ethname MAJOR = 0 MINOR = 1 - PATCH = 2 + PATCH = 3 VERSION = [MAJOR,MINOR,PATCH].join('.') def self.version diff --git a/ethname/sandbox/contractdetails.csv b/ethname/sandbox/contractdetails.csv index d3166fc..34b10f2 100644 --- a/ethname/sandbox/contractdetails.csv +++ b/ethname/sandbox/contractdetails.csv @@ -21,13 +21,39 @@ blocknumber, timestamp, address, creator, txid 0xd7bcbd, 0x61fcea8a, 0xd12882c8b5d1bccca57c994c6af7d96355590dbd, 0xc874f918f29addeb8d0a377a625fcaa91007ca66, 0xd02314f9638dd3db61c85cfaf4d11dd3abf85952619e7a87aea43c72c6adb3b9 0xd8aa65, 0x62094d9f, 0xaf9ce4b327a3b690abea6f78eccbfefffbea9fdf, 0x3ce6543978f37315e047236139817c1f446300e5, 0xfd08b691d12ff2cf05e7edccd2a311e124bffdfeb528d666c98221c93dd3d648 0xdea450, 0x62599f86, 0x23581767a106ae21c074b2276d25e5c3e136a68b, 0x6c8984baf566db08675310b122bf0be9ea269eca, 0xd4547dc336dd4a0655f11267537964d7641f115ef3d5440d71514e3efba9d210 +0xe4f796, 0x62b28a83, 0x8ae5523f76a5711fb6bdca1566df3f4707aec1c4, 0xea208da933c43857683c04bc76e3fd331d7bfdf7, 0xe25e2c321779de5a944ade29fe12787c76836ad47f28476ec86328b7d1479e54 0xe709ec, 0x62d02add, 0x6229c811d04501523c6058bfaac29c91bb586268, 0xac56e6156c9c0c56b6d9a4e8388799f25d7feb86, 0x2d1785073b0eac3fefc126badf6cfee3128639a35e439dcee7255f2397e9d531 0xe756cf, 0x62d42f7c, 0xe9b91d537c3aa5a3fa87275fbd2e4feaaed69bd0, 0xdf12dba344515c98f866af1436245438cd7d8566, 0xf6cca6972347e21871d55febe8f091e1d9d7584919826bce9d5ced237e8dd937 0xe7e9c3, 0x62dbdc08, 0x8761b55af5a703d5855f1865db8fe4dd18e94c53, 0x970a2bafd2bea9f62592e9b036bf07c287078151, 0xd730f037162e1c9602d2881ceb4600b5d595e0032b21a9e77157e668f35e28be +0xeb933c, 0x630da558, 0x82e8129dafb2d5f06aeded321fb04628f95ef654, 0x7ce5c931beea68a6bba6551ff5d993c86fa121c5, 0x598fe35a295878a83f4cd8df737fd9ab9c1a512c8b2065a3a98e6ef641b56e36 0xec0ede, 0x631450d6, 0xad8474ba5a7f6abc52708f171f57fefc5cdc8c1c, 0xfdf474098acdaec5bf8b4f7798b3e64da0d60f57, 0x9623323e2487dc3e1ed8ed3d5d2014bf81119d6b54ca8980e69445259f9ba065 0xecfbaa, 0x6321562e, 0xe5a5520b798c5f67ca1b0657b932656df02595ad, 0x549c01f812e609b80548c9837b2dacb0cb0adc64, 0x2bea1b01e5b23837de243bb1ae0298adcf710a5d26ff25b3b597c44074ac04bd +0xed2996, 0x6323c4fb, 0x844da5d5d3c1929229be1d326933307ce29065a8, 0x7ce5c931beea68a6bba6551ff5d993c86fa121c5, 0x5cc7d322be5a85cb7c0384b0d1c0ec99ebd49b01c427c8c2ae12bfd66a133a1f 0xedf272, 0x632d4a9f, 0x9b66d03fc1eee61a512341058e95f1a68dc3a913, 0xd503b89b39e5d820399e94ba6250b90fa22b9812, 0x88d3c3c0ac27e4ab93624a5de05ecd83e75637a0e434c02d8b7475f5392629a6 +0xee06fe, 0x632e4243, 0x139cf58d69779eea2edc9d0000a8f9d186d89bbb, 0x4f04c937a3ad3b77c16d856c9edd683c64e01f45, 0xda4fb6c02fa374b2dd4359e1694dbfd011f552e7d936135583d06caf2718cd17 +0xef5dd5, 0x633e6e7f, 0x25b4e698bfba060728dee0ca851d536020c79866, 0xaf2ab6d0e8f69656e7c8c967351de32f0d60fe76, 0xa38be7eaf3603089268746a9634d861a1201c500df19d475324b69d99fce20c0 0xef95d3, 0x634112e7, 0x34625ecaa75c0ea33733a05c584f4cf112c10b6b, 0xf2c0149f0cff4c19b9819d1084f465df0e1b3795, 0xb9f71063933f573385b4a1f076eb9eea74bcb35a26bb6e7e095fe1cdc92db40d 0xf15908, 0x635655e3, 0x2204a94f96d39df3b6bc0298cf068c8c82dc8d61, 0x29323644b5540d20e834578943a2bd91027699b1, 0xa4af8ee34de9681242bdec6b690aa98dc8325f0d7a3719300d7566d5af24ebfa +0xf2a2b4, 0x6365e34f, 0x7915bf033126fa5fcc4dfa79f9bdd5717ed4ce40, 0x1a1427a73b7cb0f4ea3f71c6c8090c4366c8ebe1, 0x526aeee62599e459be8b6a4c692745844e4a3ef9e5527b3228d342e44220620f +0xf34460, 0x636d8203, 0x3b84502df3d36ef2e5318bce5a988460cf349304, 0x4b074b99b7454dc183fe363faca21b2d7b120781, 0x14a480b0a019ebc28de31f708e64101ad825f1ecf31646583f9799dde7f8ab1a +0xf34582, 0x636d8fa7, 0x9a7d9b8693339f82d65f315f180faa0a558469bd, 0x75f52aef21c1692afa9bbe897a31db3002baf6c3, 0xfc0c612f7097eaaf52a0c2bf1cad71dc0dd6165a9cde7be16b5babc48497e025 +0xf3deae, 0x6374c79b, 0xcd46fce2daf0f2f5129f74b502667e61b15c89f3, 0xaf7a60900bf698814b7d4f5e3995361f9cee9150, 0xd7c71b931d08b67ff961b77bdf27762cdb1dae8cfb73169dcc1fa279524ae2f5 +0xf4ddc3, 0x6380cef7, 0x7c2af580f37c23270dd7c52765073c1601c4ad33, 0xa6933faa928ab80ba00acc4826f536e236b038ae, 0x236e52c4359b5e743cf98a1bde9d90ae4d2f7bb34c9e1371e85ff2a43d719e2f +0xf4ef8a, 0x6381a583, 0x9251dec8df720c2adf3b6f46d968107cbbadf4d4, 0x8b3f6f5c62ff1d8b66dc04ba3cc309e260bc4693, 0x15bbba06d97572cc94912ffe3c9ff47facf38dcf7265ab26e33992dd3dd2c671 0xf5d8d5, 0x638ca497, 0xd8e916c3016be144eb2907778cf972c4b01645fc, 0xc43473fa66237e9af3b2d886ee1205b81b14b2c8, 0x0d073c189b337ced2275e2f717b6ddd596e306de7e594588f12132d7fefb33ac +0xf5df48, 0x638cf297, 0xb1bee499b063ee2663b52bfc7a1372296d94e24d, 0xcb954e171c1bfdadc4af7adb3f4b20bb937b6158, 0xb8dadf50471cf57c32a43b3073359ccdb0b3456e729e9a0f86a2166bca171ad2 0xf66fe1, 0x6393c803, 0x58e90596c2065befd3060767736c829c18f3474c, 0xc43473fa66237e9af3b2d886ee1205b81b14b2c8, 0x92d3a69c4ac96ddd432f1c13e5dbb8bf3d7782489e7ee3538e78a25f2480c34f +0xf678c8, 0x6394337f, 0xd8a47f76bdca04d1b959cc70d72ae5539812e931, 0x019b0ee245fb09aaf92ac93ca3309832b7974681, 0x63b5353d737a0b0cfcd6a7a02e1573a13df4ba5ced7bf5e605ee6f64ec989481 +0xf67984, 0x63943c67, 0xe8a9189218ccd5aa20aca3398e2324ab01ef3bfd, 0xc92b56eec24b3405afb08ee7215fd50725fa7df7, 0x3c66f2dd1fd70e0853faade94bdf4f58475c137badf16a3b17b2bf5b7490bfa4 +0xf6e2ef, 0x639934bb, 0xda1d2141154d33cb3b1ce9c87002b07bd24908e9, 0xd503b89b39e5d820399e94ba6250b90fa22b9812, 0x38b2d4c39205df341bddaebafbdcc602c107a27380458f6cae87c7837a597103 +0xf708ca, 0x639afd9f, 0x6255f0e78c520decccb5356d4f51a3df04149a3d, 0xe38a7e006aaa0d848587606022dc72872fa6b5e3, 0x0f5fec339fb7f164acc56ef5d2d84e25faea62f55f06edc3ea92970910b8a6f0 +0xf7aca9, 0x63a2b60f, 0x6c1c678428cc3793a53471c9304fc0372594dbbc, 0x019b0ee245fb09aaf92ac93ca3309832b7974681, 0x16e2f52fc5542b6cf23814cb22cce6bb01c9a4715452fd87b9ec53bf077723d0 +0xf9a0ae, 0x63ba4253, 0x22a81c80bb6bf4b797acf08351934b46193bddde, 0x675e19ebf696faaa27aaa7531edd51e2e75a5baa, 0x0326255452a09ebb308ffcb85a81d97ff68ff6327931ac3aaca7381a7306f016 +0xf9e3ac, 0x63bd69ef, 0x897792d16a46f9e70446638bfc6a0d884b741f9b, 0x3dd1a54a8f84d34929e182e03371d2a2f4d47002, 0x518c1d8ee889a3137ccd2e64098fb8b12820d5792ac62f046d7f1541d8f90987 +0xfa4a36, 0x63c23f9f, 0x0e10e5e978ba4d1af92eb554cd730c9b97f4e571, 0x240b4b8bf7b50806c1823de45f6fb85441867d01, 0x267f695907de3eff5dd959baf0eaae09664712b8c6c0af912819ceeff3514c51 +0xfa9bd8, 0x63c6192b, 0x5a8e04a84fb2f6ad4002c824045c7c1bde10cb81, 0x37d245b218ffd8d546b5d16cc1f95442f70ac6ec, 0x9bfd936ad5acd79908bc7b932e3c543c5aad2156d98998c708c91e6990746739 +0xfad004, 0x63c88dc3, 0xe302f509c4a3729791215f74299f1fa626396e5a, 0x5d76f8887b6e8bd6b73ed435c935fa8fc2872edb, 0x239b98cf9e22cc709eb6d65801cd7b8f823f049592341aadea4311f974c7455d +0xfb31a9, 0x63cd278b, 0xcce158dd5384b599fc29fe34d83b11ea8fb7a816, 0xbe1c3d1f47707990d0c852589c7e3f1c13da3b00, 0x6f0d84f531b518cbb041d9ce5b06b9d82783f41d7a83732192d132a58640dc2d +0xfb36b9, 0x63cd646f, 0xb0dc51536e2b4950d7d6667748a6be6fc53c3318, 0x42f575ebe22d4be35fe9e5906c7736416d70e58e, 0x1bac8a1f5f6ebdded47764c8b2b123e8dd1435743d315d71fce096b0b022da0f +0xfb862b, 0x63d122b3, 0x94cb646dd34b3b0ff7c116208f7f7ff7ac216079, 0x8caf042685e8740c6dc9d6ac23a28d0be00139e3, 0x46673453163a9adaa61de585d874ed41bcea1c70a74a5c49f041e2db7a10922a +0xfb9621, 0x63d1e37f, 0xe6313d1776e4043d906d5b7221be70cf470f5e87, 0x84bb73064300ab1f539310237b892ca47c58778c, 0xe015aef229ebe54e6e0b788a0b3eeafac1f4a881dffef74d96e3695a63e0c261 diff --git a/ethname/sandbox/helper.rb b/ethname/sandbox/helper.rb new file mode 100644 index 0000000..9b94fc7 --- /dev/null +++ b/ethname/sandbox/helper.rb @@ -0,0 +1,68 @@ +$LOAD_PATH.unshift( "../etherscan-lite/lib" ) + +require 'ethname' +require 'etherscan-lite' + +puts " #{Ethname.directory.size} (contract) address record(s)" + + + +class ContractDetailsCache + + def initialize( path ) + @path = path + @table = if File.exist?( path ) + build_table( read_csv( path ) ) + else + {} + end + end + + def [](addr) + if @table.has_key?( addr ) + @table[ addr ] + else ## fetch missing data + data = Etherscan.getcontractdetails( contractaddress: addr ) + ## note: add new data to cache + @table[ addr ] = data + data + end + end + + + + def build_table( recs ) + h = {} + recs.each do |rec| + ## (re)use contractdetails format / hash keys + h[ rec['address'] ] = { + 'contractAddress' => rec['address'], + 'contractCreator' => rec['creator'], + 'txHash' => rec['txid'], + 'blockNumber' => rec['blocknumber'], + 'timestamp' => rec['timestamp'] + } + end + h + end + + def save + ############## + ## save cache - sort by blocknumber + entries = @table.values.sort { |l,r| l['blockNumber'].to_i(16) <=> r['blockNumber'].to_i(16) } + buf = '' + buf << ['blocknumber', 'timestamp', 'address', 'creator', 'txid'].join( ', ' ) + buf << "\n" + entries.each do |entry| + buf << [entry['blockNumber'], + entry['timestamp'], + entry['contractAddress'], + entry['contractCreator'], + entry['txHash'] + ].join( ', ' ) + buf << "\n" + end + write_text( @path, buf ) + end +end # class ContractDetailsCache + diff --git a/ethname/sandbox/inbox.csv b/ethname/sandbox/inbox.csv new file mode 100644 index 0000000..480e0ae --- /dev/null +++ b/ethname/sandbox/inbox.csv @@ -0,0 +1,5 @@ +names, address + + + + diff --git a/ethname/sandbox/inbox.rb b/ethname/sandbox/inbox.rb new file mode 100644 index 0000000..0e30a3b --- /dev/null +++ b/ethname/sandbox/inbox.rb @@ -0,0 +1,97 @@ +## +# check and auto-fill new contract candidates in inbox +# +# to run use +# ruby -I ./lib sandbox/inbox.rb + + +require_relative 'helper' + +## step 1: +## collect more metadata about (contract) address + +## build cache +cache = ContractDetailsCache.new( './sandbox/contractdetails.csv' ) + + +meta = [] + +recs = read_csv( './sandbox/inbox.csv' ) +puts " #{recs.size} record(s)" + +recs.each_with_index do |rec,i| + names = rec['names'] + addr = rec['address'].downcase + puts "==> [#{i+1}] #{names} @ #{addr}..." + + data = cache[ addr ] + pp data + + timestamp = data['timestamp'].to_i(16) + + ## reformat to "classic format" + ## for date use "2022-02-03 08:49:52" + meta << [addr, names, '', + Time.at( timestamp ).utc.strftime( '%Y-%m-%d %H:%M:%S' ) + ] +end + +### note: save back contractdetails cache +cache.save + + +## (re)sort by timestamp / created date +meta = meta.sort { |l,r| l[3] <=> r[3] } + + +## tddo - lint / warn about non-unique names if any!!! +## todo - keep track of duplicate in new names too!!! + + +pp meta + + +meta.each do |values| + names = values[1] + rec = Ethname[ names ] + if rec + puts "!! WARN - duplicate contract found for >#{names}<:" + pp rec + end +end + + +headers = [ + 'address', + 'names', + 'interfaces', + 'created' +] +### + + +buf = String.new('') +buf << headers.join( ', ') +buf << "\n" +meta.each do |values| + buf << values.join( ', ' ) + buf << "\n" +end + + +write_text( "./tmp/contracts.csv", buf ) + +puts "bye" + +__END__ + + +[["0x22a81c80bb6bf4b797acf08351934b46193bddde", "novo", "", "2023-01-08 04:10:59 UTC"], + ["0x897792d16a46f9e70446638bfc6a0d884b741f9b", "pepeburbpunks", "", "2023-01-10 13:36:47 UTC"], + ["0x0e10e5e978ba4d1af92eb554cd730c9b97f4e571", "pepeblocks", "", "2023-01-14 05:37:35 UTC"], + ["0x5a8e04a84fb2f6ad4002c824045c7c1bde10cb81", "frogcentral", "", "2023-01-17 03:42:35 UTC"], + ["0xe302f509c4a3729791215f74299f1fa626396e5a", "gmkevin", "", "2023-01-19 00:24:35 UTC"], + ["0xcce158dd5384b599fc29fe34d83b11ea8fb7a816", "deathofkevin", "", "2023-01-22 12:09:47 UTC"], + ["0xb0dc51536e2b4950d7d6667748a6be6fc53c3318", "cutekevin", "", "2023-01-22 16:29:35 UTC"], + ["0x94cb646dd34b3b0ff7c116208f7f7ff7ac216079", "ecc0s", "", "2023-01-25 12:38:11 UTC"], + ["0xe6313d1776e4043d906d5b7221be70cf470f5e87", "shiba", "", "2023-01-26 02:20:47 UTC"]] \ No newline at end of file diff --git a/ethname/sandbox/test_names.rb b/ethname/sandbox/test_names.rb index f2d7e43..9e69fa0 100644 --- a/ethname/sandbox/test_names.rb +++ b/ethname/sandbox/test_names.rb @@ -10,43 +10,4 @@ puts " #{Ethname.directory.size} (contract) address record(s)" -pp Ethname[ 'PUNKS V2' ] -pp Ethname[ 'Punks V.2' ] -pp Ethname[ '404 NOT FOUND'] - -pp Ethname[ 'PHUNKS' ] -pp Ethname[ 'SYNTHPUNKS' ] -pp Ethname[ 'PUNKBLOCKS' ] -pp Ethname[ 'MOONBIRDS' ] - - -puts -pp Ethname['punks v1'] -pp Ethname['punks v2'] -pp Ethname['punks v3'] -pp Ethname['punks v4'] - -pp Ethname['punks v1 wrapped i'] -pp Ethname['punks v1 wrapped ii'] - -pp Ethname['phunks v1'] -pp Ethname['phunks v2'] -pp Ethname['phunks v3'] - -pp Ethname['synth punks'] - -pp Ethname['punks data'] -pp Ethname['punk blocks'] - - - -pp rec = Ethname::Record.find( '0xaf9CE4B327A3b690ABEA6F78eCCBfeFFfbEa9FDf' ) -pp rec.addr -pp rec.address -pp rec.name -pp rec.names - -pp rec = Ethname::Record.find_by( name: 'synth punks' ) - - puts "bye" \ No newline at end of file diff --git a/ethname/sandbox/timeline.rb b/ethname/sandbox/timeline_generate.rb similarity index 76% rename from ethname/sandbox/timeline.rb rename to ethname/sandbox/timeline_generate.rb index e117da3..9780f58 100644 --- a/ethname/sandbox/timeline.rb +++ b/ethname/sandbox/timeline_generate.rb @@ -3,84 +3,14 @@ # (and get creation timestamp etc.) # # to run use -# ruby -I ./lib sandbox/timeline.rb - - -$LOAD_PATH.unshift( "../etherscan-lite/lib" ) - -require 'ethname' -require 'etherscan-lite' - -puts " #{Ethname.directory.size} (contract) address record(s)" +# ruby -I ./lib sandbox/timeline_generate.rb +require_relative 'helper' ## step 1: ## collect more metadata about (contract) address - - -class ContractDetailsCache - - def initialize( path ) - @path = path - @table = if File.exist?( path ) - build_table( read_csv( path ) ) - else - {} - end - end - - def [](addr) - if @table.has_key?( addr ) - @table[ addr ] - else ## fetch missing data - data = Etherscan.getcontractdetails( contractaddress: addr ) - ## note: add new data to cache - @table[ addr ] = data - data - end - end - - - - def build_table( recs ) - h = {} - recs.each do |rec| - ## (re)use contractdetails format / hash keys - h[ rec['address'] ] = { - 'contractAddress' => rec['address'], - 'contractCreator' => rec['creator'], - 'txHash' => rec['txid'], - 'blockNumber' => rec['blocknumber'], - 'timestamp' => rec['timestamp'] - } - end - h - end - - def save - ############## - ## save cache - sort by blocknumber - entries = @table.values.sort { |l,r| l['blockNumber'].to_i(16) <=> r['blockNumber'].to_i(16) } - buf = '' - buf << ['blocknumber', 'timestamp', 'address', 'creator', 'txid'].join( ', ' ) - buf << "\n" - entries.each do |entry| - buf << [entry['blockNumber'], - entry['timestamp'], - entry['contractAddress'], - entry['contractCreator'], - entry['txHash'] - ].join( ', ' ) - buf << "\n" - end - write_text( @path, buf ) - end -end # class ContractDetailsCache - - - ## build cache cache = ContractDetailsCache.new( './sandbox/contractdetails.csv' ) diff --git a/ethname/sandbox/timeline_query.rb b/ethname/sandbox/timeline_query.rb new file mode 100644 index 0000000..922dd20 --- /dev/null +++ b/ethname/sandbox/timeline_query.rb @@ -0,0 +1,31 @@ +### +# use etherscan api to lint / check-up on contract addresses +# (and get creation timestamp etc.) +# +# to run use +# ruby -I ./lib sandbox/timeline_query.rb + + +require_relative 'helper' + +## step 1: +## collect more metadata about (contract) address + +## build cache +cache = ContractDetailsCache.new( './sandbox/contractdetails.csv' ) + + +Ethname.directory.records.each_with_index do |rec,i| + puts "==> [#{i+1}] #{rec.names.join('|')} @ #{rec.addr} supports #{rec.interfaces.join('|')}..." + + data = cache[ rec.addr ] + pp data +end + + +### note: save back contractdetails cache +cache.save + + +puts "bye" + diff --git a/ethname/test/helper.rb b/ethname/test/helper.rb new file mode 100644 index 0000000..a3d586a --- /dev/null +++ b/ethname/test/helper.rb @@ -0,0 +1,7 @@ +## minitest setup +require 'minitest/autorun' + + +## our own code +require 'ethname' + diff --git a/ethname/test/test_contracts.rb b/ethname/test/test_contracts.rb new file mode 100644 index 0000000..888f8ac --- /dev/null +++ b/ethname/test/test_contracts.rb @@ -0,0 +1,63 @@ +## +# to run use +# ruby -I ./lib -I ./test test/test_contracts.rb + + +require 'helper' + + + +class TestContracts < MiniTest::Test + + +def test_contracts + assert_equal "0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb", Ethname[ 'PUNKS V2' ] + assert_equal "0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb", Ethname[ 'Punks V.2' ] + + assert_equal "0xf07468ead8cf26c752c676e43c814fee9c8cf402", Ethname[ 'PHUNKS' ] + assert_equal "0xaf9ce4b327a3b690abea6f78eccbfefffbea9fdf", Ethname[ 'SYNTHPUNKS' ] + assert_equal "0x58e90596c2065befd3060767736c829c18f3474c", Ethname[ 'PUNKBLOCKS' ] + assert_equal "0x23581767a106ae21c074b2276d25e5c3e136a68b", Ethname[ 'MOONBIRDS' ] + + + assert_equal "0x6ba6f2207e343923ba692e5cae646fb0f566db8d", Ethname['punks v1'] + assert_equal "0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb", Ethname['punks v2'] + assert_equal "0xd33c078c2486b7be0f7b4dda9b14f35163b949e0", Ethname['punks v3'] + assert_equal "0xd12882c8b5d1bccca57c994c6af7d96355590dbd", Ethname['punks v4'] + + assert_equal "0xf4a4644e818c2843ba0aabea93af6c80b5984114", Ethname['punks v1 wrapped i'] + assert_equal "0x282bdd42f4eb70e7a9d9f40c8fea0825b7f68c5d", Ethname['punks v1 wrapped ii'] + + assert_equal "0xa82f3a61f002f83eba7d184c50bb2a8b359ca1ce", Ethname['phunks v1'] + assert_equal "0xf07468ead8cf26c752c676e43c814fee9c8cf402", Ethname['phunks v2'] + assert_equal "0xa19f0378a6f3f3361d8e962f3589ec28f4f8f159", Ethname['phunks v3'] + + assert_equal "0xaf9ce4b327a3b690abea6f78eccbfefffbea9fdf", Ethname['synth punks'] + + assert_equal "0x16f5a35647d6f03d5d3da7b35409d65ba03af3b2", Ethname['punks data'] + assert_equal "0x58e90596c2065befd3060767736c829c18f3474c", Ethname['punk blocks'] + + assert_nil Ethname[ '404 NOT FOUND'] +end + + +def test_find_record + rec = Ethname::Record.find( '0xaf9CE4B327A3b690ABEA6F78eCCBfeFFfbEa9FDf' ) + + assert_equal "0xaf9ce4b327a3b690abea6f78eccbfefffbea9fdf", rec.addr + assert_equal "0xaf9ce4b327a3b690abea6f78eccbfefffbea9fdf", rec.address + assert_equal "synth punks", rec.name + assert_equal ["synth punks", "synthetic punks"], rec.names + + rec = Ethname::Record.find_by( name: 'synth punks' ) + + assert_equal "0xaf9ce4b327a3b690abea6f78eccbfefffbea9fdf", rec.addr + assert_equal "0xaf9ce4b327a3b690abea6f78eccbfefffbea9fdf", rec.address + assert_equal "synth punks", rec.name + assert_equal ["synth punks", "synthetic punks"], rec.names +end + + +end # class TestContracts + +