Существует ли какое-либо программное обеспечение помимо Geth и Mist, которое предлагает консоль Javascript? Я хочу использовать консоль, но я не хочу делать все, что синхронизирует

Есть ли какое-либо программное обеспечение, помимо Geth и Mist, которое предлагает Javascript-консоль? Я хочу использовать консоль, но я не хочу делать эту синхронизацию.

Четность не имеет консоли, насколько я знаю, и MetaMask не имеет. Любое другое программное обеспечение там?

4 голоса | спросил Vesa 27 TueEurope/Moscow2016-12-27T18:04:06+03:00Europe/Moscow12bEurope/MoscowTue, 27 Dec 2016 18:04:06 +0300 2016, 18:04:06

6 ответов


5

Попробуйте geth --light console, доступный начиная с версии 1.5.2, но перечисленные в разделе «Экспериментальные функции». Синхронизирует в минутах , если не секунды .

Обновление . Начальная синхронизация заняла 11 минут. Впоследствии синхронизация блоков на 7 часов занимала 8 секунд.

Я буду документировать статистику легкого клиента ниже.

Вот некоторые статистические данные (текущий блок 2972534 :

Iota:geth user$ geth --light console
...
 I0111 08:34:43.034258 eth/downloader/downloader.go:326] Block synchronisation started
I0111 08:34:48.181285 core/headerchain.go:331] imported 192 headers in    2.083s. #2609343 [20a7f505… / f422ad5d…]
...
0111 08:37:30.529558 core/headerchain.go:331] imported 384 headers in  68.146ms. #2695167 [eeb0e8b4… / b3e90f82…]
I0111 08:37:30.750613 core/headerchain.go:331] imported 192 headers in  36.462ms. #2695359 [f19dec17… / 2d39932d…]
...
I0111 08:42:07.574887 core/headerchain.go:331] imported 768 headers in 145.734ms. #2854143 [3878698c… / a6998900…]
I0111 08:42:07.643398 core/headerchain.go:331] imported 192 headers in  57.545ms. #2854335 [6a726c3c… / 96647a62…]
...
I0111 08:43:32.513446 core/headerchain.go:331] imported 384 headers in  70.834ms. #2900991 [db81a3ae… / 2da617ae…]
I0111 08:43:34.986411 core/headerchain.go:331] imported 1344 headers in 295.133ms. #2902335 [49e9082a… / a59aa59f…]
...
I0111 08:45:47.420502 core/headerchain.go:331] imported 143 headers in 240.806ms. #2972558 [ab60d4f7… / 86202d19…]
I0111 08:45:52.135652 core/headerchain.go:331] imported 1 headers in   5.174ms. #2972559 [0a53cdc5… / 0a53cdc5…]
I0111 08:45:58.738955 core/headerchain.go:331] imported 1 headers in   5.570ms. #2972560 [1a98b864… / 1a98b864…]

Проверка объема занимаемого дискового пространства:

Iota:geth user$ pwd
/Users/user/Library/Ethereum/geth
Iota:geth user$ ls -al
total 0
drwx------      5 user staff      170 11 Jan 08:34 .
drwxr-xr-x     10 user staff      340 11 Jan 08:46 ..
-rw-r--r--      1 user staff        0 19 Nov 00:30 LOCK
drwxr-xr-x  61204 user staff  2080936 11 Jan 08:28 chaindata
drwxr-xr-x     69 user staff     2346 11 Jan 08:45 lightchaindata
Iota:geth user$ du -hs *
  0B      LOCK
109G      chaindata
139M  lightchaindata

Проверка случайной учетной записи 0x5d03a3e0ab0fd3b00f1c3654b0765d923960c464 баланс, который в настоящее время составляет 4.03604217 ETH от EtherScan.

Iota:geth user$ geth --light console
...
> eth.syncing
{
  currentBlock: 2972561,
  highestBlock: 2972575,
  knownStates: 0,
  pulledStates: 0,
  startingBlock: 2972561
}
I0111 08:50:26.838756 core/headerchain.go:331] imported 0 headers (1 ignored) in  92.695µs. #2972578 [0da2ff52… / 0da2ff52…]
> web3.fromWei(eth.getBalance("0x5d03a3e0ab0fd3b00f1c3654b0765d923960c464"), "ether")
4.03604217

Проверка поиска событий DAO с использованием кода Как получить удаленные события из DAO , но только для 10 блоков потребовалось 12 секунд:

I0111 08:59:06.052210 core/headerchain.go:331] imported 0 headers (1 ignored) in  73.395µs. #2972619 [952243d6… / 952243d6…]
> var theDAOInterfaceABI = [{ "constant": true, "inputs": [{ "name": "", "type": "uint256" }], "name": "proposals", "outputs": [{ "name": "recipient", "type": "address" }, { "name": "amount", "type": "uint256" }, { "name": "description", "type": "string" }, { "name": "votingDeadline", "type": "uint256" }, { "name": "open", "type": "bool" }, { "name": "proposalPassed", "type": "bool" }, { "name": "proposalHash", "type": "bytes32" }, { "name": "proposalDeposit", "type": "uint256" }, { "name": "newCurator", "type": "bool" }, { "name": "yea", "type": "uint256" }, { "name": "nay", "type": "uint256" }, { "name": "creator", "type": "address" }], "type": "function" }, { "constant": true, "inputs": [], "name": "rewardAccount", "outputs": [{ "name": "", "type": "address" }], "type": "function" }, { "constant": true, "inputs": [], "name": "daoCreator", "outputs": [{ "name": "", "type": "address" }], "type": "function" }, { "constant": false, "inputs": [{ "name": "_proposalID", "type": "uint256" }, { "name": "_transactionData", "type": "bytes" }], "name": "executeProposal", "outputs": [{ "name": "_success", "type": "bool" }], "type": "function" }, { "constant": false, "inputs": [], "name": "unblockMe", "outputs": [{ "name": "", "type": "bool" }], "type": "function" }, { "constant": true, "inputs": [], "name": "totalRewardToken", "outputs": [{ "name": "", "type": "uint256" }], "type": "function" }, { "constant": true, "inputs": [{ "name": "", "type": "address" }], "name": "allowedRecipients", "outputs": [{ "name": "", "type": "bool" }], "type": "function" }, { "constant": false, "inputs": [{ "name": "_to", "type": "address" }, { "name": "_amount", "type": "uint256" }], "name": "transferWithoutReward", "outputs": [{ "name": "success", "type": "bool" }], "type": "function" }, { "constant": false, "inputs": [{ "name": "_recipient", "type": "address" }, { "name": "_amount", "type": "uint256" }, { "name": "_description", "type": "string" }, { "name": "_transactionData", "type": "bytes" }, { "name": "_debatingPeriod", "type": "uint256" }, { "name": "_newCurator", "type": "bool" }], "name": "newProposal", "outputs": [{ "name": "_proposalID", "type": "uint256" }], "type": "function" }, { "constant": true, "inputs": [{ "name": "", "type": "address" }], "name": "DAOpaidOut", "outputs": [{ "name": "", "type": "uint256" }], "type": "function" }, { "constant": true, "inputs": [], "name": "minQuorumDivisor", "outputs": [{ "name": "", "type": "uint256" }], "type": "function" }, { "constant": false, "inputs": [{ "name": "_newContract", "type": "address" }], "name": "newContract", "outputs": [], "type": "function" }, { "constant": false, "inputs": [{ "name": "_recipient", "type": "address" }, { "name": "_allowed", "type": "bool" }], "name": "changeAllowedRecipients", "outputs": [{ "name": "_success", "type": "bool" }], "type": "function" }, { "constant": false, "inputs": [], "name": "halveMinQuorum", "outputs": [{ "name": "_success", "type": "bool" }], "type": "function" }, { "constant": true, "inputs": [{ "name": "", "type": "address" }], "name": "paidOut", "outputs": [{ "name": "", "type": "uint256" }], "type": "function" }, { "constant": false, "inputs": [{ "name": "_proposalID", "type": "uint256" }, { "name": "_newCurator", "type": "address" }], "name": "splitDAO", "outputs": [{ "name": "_success", "type": "bool" }], "type": "function" }, { "constant": true, "inputs": [], "name": "DAOrewardAccount", "outputs": [{ "name": "", "type": "address" }], "type": "function" }, { "constant": true, "inputs": [], "name": "proposalDeposit", "outputs": [{ "name": "", "type": "uint256" }], "type": "function" }, { "constant": true, "inputs": [], "name": "numberOfProposals", "outputs": [{ "name": "_numberOfProposals", "type": "uint256" }], "type": "function" }, { "constant": true, "inputs": [], "name": "lastTimeMinQuorumMet", "outputs": [{ "name": "", "type": "uint256" }], "type": "function" }, { "constant": false, "inputs": [{ "name": "_toMembers", "type": "bool" }], "name": "retrieveDAOReward", "outputs": [{ "name": "_success", "type": "bool" }], "type": "function" }, { "constant": false, "inputs": [], "name": "receiveEther", "outputs": [{ "name": "", "type": "bool" }], "type": "function" }, { "constant": true, "inputs": [{ "name": "_proposalID", "type": "uint256" }], "name": "getNewDAOAddress", "outputs": [{ "name": "_newDAO", "type": "address" }], "type": "function" }, { "constant": false, "inputs": [{ "name": "_proposalID", "type": "uint256" }, { "name": "_supportsProposal", "type": "bool" }], "name": "vote", "outputs": [{ "name": "_voteID", "type": "uint256" }], "type": "function" }, { "constant": false, "inputs": [], "name": "getMyReward", "outputs": [{ "name": "_success", "type": "bool" }], "type": "function" }, { "constant": true, "inputs": [{ "name": "", "type": "address" }], "name": "rewardToken", "outputs": [{ "name": "", "type": "uint256" }], "type": "function" }, { "constant": false, "inputs": [{ "name": "_from", "type": "address" }, { "name": "_to", "type": "address" }, { "name": "_amount", "type": "uint256" }], "name": "transferFromWithoutReward", "outputs": [{ "name": "success", "type": "bool" }], "type": "function" }, { "constant": false, "inputs": [{ "name": "_proposalDeposit", "type": "uint256" }], "name": "changeProposalDeposit", "outputs": [], "type": "function" }, { "constant": true, "inputs": [{ "name": "", "type": "address" }], "name": "blocked", "outputs": [{ "name": "", "type": "uint256" }], "type": "function" }, { "constant": true, "inputs": [], "name": "curator", "outputs": [{ "name": "", "type": "address" }], "type": "function" }, { "constant": true, "inputs": [{ "name": "_proposalID", "type": "uint256" }, { "name": "_recipient", "type": "address" }, { "name": "_amount", "type": "uint256" }, { "name": "_transactionData", "type": "bytes" }], "name": "checkProposalCode", "outputs": [{ "name": "_codeChecksOut", "type": "bool" }], "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": true, "name": "proposalID", "type": "uint256" }, { "indexed": false, "name": "recipient", "type": "address" }, { "indexed": false, "name": "amount", "type": "uint256" }, { "indexed": false, "name": "newCurator", "type": "bool" }, { "indexed": false, "name": "description", "type": "string" }], "name": "ProposalAdded", "type": "event" }, { "anonymous": false, "inputs": [{ "indexed": true, "name": "proposalID", "type": "uint256" }, { "indexed": false, "name": "position", "type": "bool" }, { "indexed": true, "name": "voter", "type": "address" }], "name": "Voted", "type": "event" }, { "anonymous": false, "inputs": [{ "indexed": true, "name": "proposalID", "type": "uint256" }, { "indexed": false, "name": "result", "type": "bool" }, { "indexed": false, "name": "quorum", "type": "uint256" }], "name": "ProposalTallied", "type": "event" }, { "anonymous": false, "inputs": [{ "indexed": true, "name": "_newCurator", "type": "address" }], "name": "NewCurator", "type": "event" }, { "anonymous": false, "inputs": [{ "indexed": true, "name": "_recipient", "type": "address" }, { "indexed": false, "name": "_allowed", "type": "bool" }], "name": "AllowedRecipientChanged", "type": "event" }];
undefined
> var theDAOAddress = "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413";
undefined
> var theDAOInterface = web3.eth.contract(theDAOInterfaceABI).at(theDAOAddress);
undefined
> var theDAOVotedEvent = theDAOInterface.Voted({}, { fromBlock: 1630418, toBlock: 1630428 });
undefined
> var i = 0;
undefined
> theDAOVotedEvent.watch(function (error, result) {
    console.log(i++ + ": " + JSON.stringify(result));
});
...
0: {"address":"0xbb9bc244d798123fde783fcc1c72d3bb8c189413","args":{"position":false,"proposalID":"3","voter":"0x89dbadfc48054057b6c9c378f6edf9d15d8b1d68"},"blockHash":null,"blockNumber":null,"event":"Voted","logIndex":0,"removed":false,"transactionHash":"0x0000000000000000000000000000000000000000000000000000000000000000","transactionIndex":0}
1: {"address":"0xbb9bc244d798123fde783fcc1c72d3bb8c189413","args":{"position":true,"proposalID":"15","voter":"0xcd0a161bc367ae0927a92aac9cf6e5086714efca"},"blockHash":null,"blockNumber":null,"event":"Voted","logIndex":0,"removed":false,"transactionHash":"0x0000000000000000000000000000000000000000000000000000000000000000","transactionIndex":0}
2: {"address":"0xbb9bc244d798123fde783fcc1c72d3bb8c189413","args":{"position":true,"proposalID":"15","voter":"0x89dbadfc48054057b6c9c378f6edf9d15d8b1d68"},"blockHash":null,"blockNumber":null,"event":"Voted","logIndex":0,"removed":false,"transactionHash":"0x0000000000000000000000000000000000000000000000000000000000000000","transactionIndex":0}
I0111 08:59:18.066685 core/headerchain.go:331] imported 1 headers in   9.304ms. #2972620 [591a881e… / 591a881e…]

Теперь я попытаюсь извлечь события для 1000 блоков:

I0111 09:07:13.141814 core/headerchain.go:331] imported 0 headers (1 ignored) in  91.993µs. #2972655 [aca94ac7… / aca94ac7…]
> var theDAOVotedEvent = theDAOInterface.Voted({}, { fromBlock: 1630428, toBlock: 1631428 });
undefined
> var i = 0;
undefined
> theDAOVotedEvent.watch(function (error, result) {
    console.log(i++ + ": " + JSON.stringify(result));
});
I0111 09:07:32.414297 core/headerchain.go:331] imported 1 headers in   5.613ms. #2972656 [4de4e836… / 4de4e836…]
// Still no data
I0111 09:12:04.476901 core/headerchain.go:331] imported 1 headers in   5.037ms. #2972686 [e8742c05… / e8742c05…]
// Still no data. Exiting program.
I0111 09:14:20.093697 core/headerchain.go:331] imported 1 headers in   5.376ms. #2972690 [c86f8399… / c86f8399…]

Я вышел из geth и перезапустил geth --light console и выполнил ту же команду, что и предыдущий раздел, для получения событий из 1000 блоков, и результаты вернулись через 15 секунд.

I0111 09:15:39.512646 core/headerchain.go:331] imported 0 headers (1 ignored) in  75.565µs. #2972693 [7321330d… / 7321330d…]
> var theDAOInterfaceABI = [{ "constant": true ...
...
var theDAOVotedEvent = theDAOInterface.Voted({}, { fromBlock: 1630428, toBlock: 1631428 });
undefined
> var i = 0;
undefined
> theDAOVotedEvent.watch(function (error, result) {
    console.log(i++ + ": " + JSON.stringify(result));
});
I0111 09:15:52.424066 core/headerchain.go:331] imported 1 headers in   6.768ms. #2972694 [40492702… / 40492702…]
I0111 09:15:52.543705 core/headerchain.go:331] imported 0 headers (1 ignored) in   73.79µs. #2972694 [40492702… / 40492702…]
I0111 09:16:10.304987 core/headerchain.go:331] imported 1 headers in   5.613ms. #2972695 [60cc2682… / 60cc2682…]
0: {"address":"0xbb9bc244d798123fde783fcc1c72d3bb8c189413","args":{"position":true,"proposalID":"17","voter":"0x89dbadfc48054057b6c9c378f6edf9d15d8b1d68"},"blockHash":null,"blockNumber":null,"event":"Voted","logIndex":0,"removed":false,"transactionHash":"0x0000000000000000000000000000000000000000000000000000000000000000","transactionIndex":0}
1: {"address":"0xbb9bc244d798123fde783fcc1c72d3bb8c189413","args":{"position":true,"proposalID":"5","voter":"0x1a51e74e25825b4ff2d0110ced7a46e0405259cd"},"blockHash":null,"blockNumber":null,"event":"Voted","logIndex":0,"removed":false,"transactionHash":"0x0000000000000000000000000000000000000000000000000000000000000000","transactionIndex":0}
...
29: {"address":"0xbb9bc244d798123fde783fcc1c72d3bb8c189413","args":{"position":true,"proposalID":"17","voter":"0xeef5d8bb8391dccfc606047cf65e3fb24379acf5"},"blockHash":null,"blockNumber":null,"event":"Voted","logIndex":0,"removed":false,"transactionHash":"0x0000000000000000000000000000000000000000000000000000000000000000","transactionIndex":0}
I0111 09:16:25.950938 core/headerchain.go:331] imported 1 headers in   5.576ms. #2972696 [59f8d25c… / 59f8d25c…]
I0111 09:16:31.604916 core/headerchain.go:331] imported 1 headers in   7.879ms. #2972697 [5b8f6907… / 5b8f6907…]

Вывод:

  1. geth --light кажется немного нестабильным в настоящее время для извлечения событий из исторической части блок-цепи. Первый поиск событий из 1000 блоков не возвращал данные за разумное время (я ждал 7 минут). Я остановил geth и перезапустил его и снова запустил ту же команду. Данные блока для 1000 блоков уже были загружены, а события были получены во второй раз за 15 секунд.
  2. Но синхронизация и производительность кажутся довольно хорошими, если вам нужны только текущие данные.

Update

Синхронизация блоков на 7 часов занимает 8 секунд:

> I0111 16:10:43.598515 eth/downloader/downloader.go:326] Block synchronisation started
I0111 16:10:47.586689 contracts/release/release.go:134] Failed to retrieve current release: Missing trie node f62d536cd4f1bfd9b0b5d2d1a989ea2ca40f9fb4bbdee93fc346addf0d83b9c3
I0111 16:10:49.137822 core/headerchain.go:331] imported 576 headers in    2.053s. #2973345 [d94df51e… / d096138a…]
I0111 16:10:49.209909 core/headerchain.go:331] imported 192 headers in  62.450ms. #2973537 [2fefee19… / d3bfd1eb…]
I0111 16:10:49.323178 core/headerchain.go:331] imported 384 headers in  89.319ms. #2973921 [f7365657… / d3b513bb…]
I0111 16:10:49.942067 core/headerchain.go:331] imported 192 headers in  39.532ms. #2974113 [8f08532d… / 971d6b2c…]
I0111 16:10:52.490579 core/headerchain.go:331] imported 192 headers in  43.145ms. #2974305 [ddd9974a… / 92a3086d…]
I0111 16:10:55.263782 core/headerchain.go:331] imported 121 headers in 155.070ms. #2974426 [907785ea… / f2daed7b…]
> eth.syncing
false
> I0111 16:11:17.416889 core/headerchain.go:331] imported 1 headers in   7.214ms. #2974427 [3dbe6f83… / 3dbe6f83…]
I0111 16:11:17.467800 core/headerchain.go:331] imported 0 headers (1 ignored) in  63.661µs. #2974427 [3dbe6f83… / 3dbe6f83…]
I0111 16:11:17.765045 core/headerchain.go:331] imported 0 headers (1 ignored) in  81.887µs. #2974427 [3dbe6f83… / 3dbe6f83…]
I0111 16:11:25.297098 core/headerchain.go:331] imported 1 headers in   5.074ms. #2974428 [f8717170… / f8717170…]
I0111 16:11:25.435765 core/headerchain.go:331] imported 0 headers (1 ignored) in  72.059µs. #2974428 [f8717170… / f8717170…]
ответил The Officious BokkyPooBah 10 Jpm1000000pmTue, 10 Jan 2017 18:44:38 +030017 2017, 18:44:38
4

Теперь я использую TestRPC в качестве поставщика Web3 для обеспечения конфиденциальности браузера как расширение Chrome .

Затем вы можете разработать и запустить интерфейсы DAPP и использовать консоль Chrome для взаимодействия с web3.

ответил o0ragman0o 28 WedEurope/Moscow2016-12-28T02:32:18+03:00Europe/Moscow12bEurope/MoscowWed, 28 Dec 2016 02:32:18 +0300 2016, 02:32:18
2

Самый простой способ, который я нашел, - настроить экземпляр виртуального сервера, установить nodejs, установить testrpc через npm, а также использовать модуль Web3, как указано в вышеприведенном сообщении.

В этом видео рассказывается, как настроить testrpc на экземпляре AWS EC2 и как взаимодействовать с ним с помощью консоли nodejs и Web3.

http://www.decypher.tv/series/ethereum-development /видео /1

Вот команды и примечания GitHub, используемые для видео.

https://gist.github.com/AlwaysBCoding/9ce09281e5e097ce8ab7add2602c2fc7#file -scripts-TXT

ответил milkywaymasta 28 WedEurope/Moscow2016-12-28T07:27:41+03:00Europe/Moscow12bEurope/MoscowWed, 28 Dec 2016 07:27:41 +0300 2016, 07:27:41
1

Можно настроить собственную консоль JS практически для любого клиента.

Сначала приобретите web3.js . Либо используя npm для его установки, либо используя файл HTML, который содержит фактический файл web3.js, будет работать.

Затем подключитесь к вашему экземпляру через RPC. С узлом это будет выглядеть примерно так:

var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'))
web3.isConnected() // should return true.

Если вы не знакомы с node.js, вы можете получить консоль с простым node в терминале. Обязательно сделайте это в каталоге, где вы использовали npm для установки web3.

В качестве альтернативы, если вы включили web3 в HTML-файл, вы можете использовать только это:

var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
web3.isConnected() // also should return true.

И затем вы можете использовать собственную консоль JS для браузера.

Но вы можете просто использовать Metamask. Попробуйте ввести web3.isConnected() в собственном браузере JS при использовании Metamask и посмотреть, что произойдет.

ответил Matthew Schmidt 29 ThuEurope/Moscow2016-12-29T20:56:28+03:00Europe/Moscow12bEurope/MoscowThu, 29 Dec 2016 20:56:28 +0300 2016, 20:56:28
1

Оказывается , что вы можете используйте Parity с помощью parity --geth, чтобы он работал с Mist или geth attach. Таким образом, вы можете использовать синхронизацию warp Parity, а затем --geth использовать консоль.

ответил Matthew Schmidt 10 Jpm1000000pmTue, 10 Jan 2017 18:30:34 +030017 2017, 18:30:34
0

В приведенном выше сообщении упоминается сериал decyphertv. http://decypher.tv/series/ethereum-development Серия поставляется с утилитой командной строки с открытым исходным кодом, которая позволяет создавать безопасные подписанные транзакции для перемещения эфира или для развертывания и управления контрактами. Затем он отправляет их в INFURA, если вы хотите, чтобы все без необходимости запускать узел.

Я участвую в этой серии, и я рекомендую ее высоко.

ответил John Shearing 2 AMpSun, 02 Apr 2017 06:58:11 +030058Sunday 2017, 06:58:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132