Я пытаюсь проанализировать блокчейн и извлечь в текстовый файл часть транзакций и адресов для конкретного контракта (DAO) для последующего анализа. Я хотел бы сохранить вывод в файл (.txt), чтобы использовать его позже.
Привет, мне удалось проанализировать блокчейн Ethereum с помощью Web3.js, используя просто консоль geth.
$ cd /path/to/file
$ geth --exec 'loadScript("myEthereumBlockchainParses.js")' attach
а также подключить его к экземпляру Node.js с помощью rpc
$ geth --rpc
$ node myEthereumBlockchainParses.js
У меня 2 разные проблемы:
ошибка: не удается найти модуль «fs»
первый метод в консоли geth намного быстрее .
после отличных ответов @BoppyKooBah вот код https://github.com/lyricalpolymath/Ethereum_DaoExtraBalanceOwners/blob/master/extraBalanceRunScript
Из Сколько атак уязвимости рекурсивных вызовов The DAO произошло на сегодняшний день? , вот что я делаю, чтобы получить простые скрипты для извлечения и сохранения данных:
Скопируйте следующий скрипт в getTheDAOTransferEvents
:
#!/bin/sh
# First search from 1428757 (The DAO creation) to 1736131
# First Transfer event in block 1599207
FIRSTBLOCK=${1:-1599207}
LASTBLOCK=${2:-"'latest'"}
echo "Searching for The DAO Transfer events to address 0x0000000000000000000000000000000000000000 between blocks $FIRSTBLOCK and $LASTBLOCK"
geth attach << EOF | egrep -e ",0x"
var theDAOABI = [{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"}];
var theDAOAddress = "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413";
var theDAO = web3.eth.contract(theDAOABI).at(theDAOAddress);
var theDAOTransferEvent = theDAO.Transfer({}, {fromBlock: $FIRSTBLOCK, toBlock: $LASTBLOCK});
console.log("No,From,Block,DAOs");
var i = 0;
theDAOTransferEvent.watch(function(error, result){
var args = result.args;
if (args._to == "0x0000000000000000000000000000000000000000") {
i++;
var daos = args._amount / 1e16;
console.log(i + "," + args._from + "," + result.blockNumber + "," + daos);
}
});
theDAOTransferEvent.stopWatching();
EOF
Установите исполняемый бит файла с помощью chmod 700 getTheDAOTransferEvents
.
Затем запустите скрипт в отдельном окне терминала, чтобы извлечь все интересующие события Transfer, используя
./getTheDAOTransferEvents > output.txt
В : есть ли более быстрый/лучший способ сделать то, что я пытаюсь сделать (разобрать и извлечь в файловую систему часть блокчейна)?
Скорее всего. Вам просто нужно протестировать различные методы для ваших вариантов использования.
В : Есть ли способ использовать модули узла и этот синтаксис в консоли geth (которая быстрее, чем --rpc)?
Я не оценивал это.
Q : Есть ли способ сделать --rpc быстрее?
Вы можете запустить несколько копий сценария оболочки одновременно, например:
./getTheDAOTransferEvents 0 999999 > output0.txt &
./getTheDAOTransferEvents 1000000 1999999 > output1.txt &
./getTheDAOTransferEvents 2000000 2999999 > output2.txt &
./getTheDAOTransferEvents 3000000 3999999 > output3.txt &
...
В : Сначала я думал о сохранении в файле simple.txt, но, может быть, лучше хранить такой объем информации в базе данных, такой как MongoDB?
Полезно, если вы хотите получить доступ, используя индексы. Redis тоже хорош.
Мне нравится философия Unix , «которая делает упор на создание простого, короткого, ясного, модульного и расширяемого кода, который может легко поддерживаться и перепрофилироваться другими разработчиками, а не его создателями».
Я начинаю просто создавать файлы значений, разделенные запятыми (или табуляцией), а затем использую другие процессы для перемещения данных в базу данных SQL/NoSQL.
Затем, если мне нужно больше скорости/логики/связи, я пытаюсь улучшить процесс.
РЕДАКТИРОВАТЬ 23/07/2016 - Ответ на комментарии ниже
позвольте мне сказать, что "get attach << EOF | egrep -e ",0x" == MAGIC! :) это какой-то хардкорный мамбо-джамбо :) Однако мне нужно изменить регулярное выражение, чтобы оно соответствовало моим потребностям. Я поиграю с это и опубликовать полное решение. Единственное, это сохраняется только в один файл. Есть ли способ сохранить разные части вывода консоли в разные файлы? - также. это не дает визуальной обратной связи о выполнении Команда. Есть ли способ показать прогресс? Спасибо!
В : Есть ли способ сохранить разные части вывода консоли в разные файлы?
Я grep
иногда использую для разделения данных. Вот пример использования theDAOVoter
https://github.com/bokkypoobah/TheDAOVoter для перечисления разделений DAO.
# Generate list of DAO splits
user@Kumquat:~$ theDAOVoter --sumsplits > sumSplits
# Extract data for account 0x1368
user@Kumquat:~$ egrep "0x1368|Status" sumSplits
Prop Status Yea Nay Recipient Description
1 Expired 967598.22 4276278.60 0x13680fa2a60fd551894199f009cca20fb63a3e31
18 Expired 2200.20 3913649.01 0x13680fa2a60fd551894199f009cca20fb63a3e31
# Extract data for account 0x3d55
user@Kumquat:~$ egrep "0x3d55|Status" sumSplits
Prop Status Yea Nay Recipient Description
4 Expired 5279.34 4322941.58 0x3d5507b53d1613d8491a606ecf5c9268301095dd split
# Extract data for accounts other than 0x1368 and 0x3d55
user@Kumquat:/tmp$ egrep -v -e "0x1368|0x3d55" sumSplits
Prop Status Yea Nay Recipient Description
6 Expired 1.99 175453.91 0xbeb0b93c01297146782a5581370489a36b24deca Original intent, non-interventionist cur
7 Expired 118006.68 3967413.62 0xe82d5b10ad98d34df448b07a5a62c1affbef758f Leave me alone
8 Expired 199999.99 3931880.95 0xa72ded5c1122312d9f4ed66bf4a396139eadaf56
...
В : это не дает визуальной обратной связи о выполнении команды. есть ли способ показать прогресс?
Я использую команду Unix watch
для отображения изменений. -d
подчеркивает различия. -n5
например обновляет дисплей каждые 5 секунд.
# Watch the file size growing as the data gets written
watch -d -n5 'ls -al'
# Watch the number of lines in the file as the data gets written
watch -d -n5 'wc -l sumSplits'
# Watch the last 3 lines in the file changes as the data gets written
watch -d -n5 'tail -n3 sumSplits'
Или используйте tail -f sumSplits
для отображения содержимого файла по мере записи данных.
Возможно, это не тот подробный ответ, который вы искали, и он, конечно же, не охватывает ваши конкретные запросы, но инструмент EthSlurp может оказаться полезным.
Это позволяет вам:
... «захлестнуть» блокчейн Ethereum, извлекая транзакции с любого адреса Ethereum, включая смарт-контракты, и сохранять эти транзакции в знакомых форматах файлов, таких как .csv (MS Excel) или .txt.
Автор инструмента проводит непрерывные ежедневные исследования TheDAO с момента его запуска, данные из которых доступны на веб-сайте DAO Deep Dive .
Галахад
Галахад
node.js
модули: ethereum.stackexchange.com/q/6696/2460q9f
б25
конфиденциальностьisahumanright.eth
б25