主页 > 最新版imtoken官网 > 收集以太坊合约地址并将csv文件数据导入数据库

收集以太坊合约地址并将csv文件数据导入数据库

最新版imtoken官网 2023-08-17 05:10:55

以太坊合约地址集合

短时间内部署以太坊智能合约已经被区块链确认时间过长,尤其是在开发需要使用合约地址的应用时,系统应该保持“合约地址始终可用”的状态,不能需要时使用。 到达合约地址后,部署合约生成合约地址。 实现这一点的最好方法是提前在区块链中批量部署合约,使地址在系统中保持可用。

简单的方法是每次将批量生成的地址dump成一个csv文件以太坊地址批量生成,然后使用Rails任务将合约地址批量导入数据库,由系统分配给用户。

另一种方式是将部署合约生成的合约地址保存在redis中,然后运行一个服务监控geth生成的合约地址剩余数量。 因为这些地址不断地分配给系统的用户账户,从而不断减少。 当跌至“下限”阈值时,服务会自动部署合约,批量生成合约地址,生成的合约地址会继续存储,等待分配。

第一种方法比较传统,属于古代手工方法的手段,而后者则比较先进。

这里讨论手动将转储到csv文件的合约地址导入数据库的方法。

Rails任务导入数据

这里需要引入一个Ruby gem smarter_csv

smarter_csv 是一个 Ruby Gem,用于更智能地将 CSV 文件导入为哈希数组以太坊地址批量生成,适用于使用 Mongoid 或 ActiveRecord 直接处理,以及使用 Resque 或 Sidekiq 进行并行处理。

用法示例:

$ cat pets.csv
first name,last name,dogs,cats,birds,fish
Dan,McAllister,2,,,
Lucy,Laweless,,5,,
Miles,O'Brian,,,,21
Nancy,Homes,2,,1,
$ irb
> require 'smarter_csv'
 => true
> pets_by_owner = SmarterCSV.process('/tmp/pets.csv')
 => [ {:first_name=>"Dan", :last_name=>"McAllister", :dogs=>"2"},
      {:first_name=>"Lucy", :last_name=>"Laweless", :cats=>"5"},
      {:first_name=>"Miles", :last_name=>"O'Brian", :fish=>"21"},
      {:first_name=>"Nancy", :last_name=>"Homes", :dogs=>"2", :birds=>"1"}
    ]

读取后输出的数据结构是一个数组,csv文件中的每一行数据组成一个hash作为数组元素。

在 Rails 项目中,将 gem 'smarter_csv' 添加到 Gemfile 并进行捆绑安装

然后是rake任务

require 'smarter_csv'
namespace :import_address do
  desc "Import spare token address from csv file"
  task :create_spare => :environment do
    tokens = SmarterCSV.process("#{Rails.root}/tmp/contract_address.csv")
    tokens.each do |item|
      p "Import #{item[:address]}"
      Spare.create! item
    end
  end
end

contract_address.csv放在rails工程的tmp目录下,需要注意的是csv文件中内容的格式必须和spares表中的字段一致,否则Spare.create! 项目将是错误的。 比如数据库表中有token_type和contract_address字段,那么文件中的结构应该是这样的:

//tmp/contract_address.csv
token_type,contract_address
eth,0xc6e94741eccb04e50d42df821943eed07c74cdc4
nlc,0x3009fc293c582d7caf247f3b75781e1fb4a39tre
sdc,0x3009fc293c582d7caf247f3b75781e1fb4a39245

最后执行任务 rake import_address:create_spare