Пользовательская сеть Go-Ethereum: как ограничить создание контрактов?

Я создал собственный блокчейн с помощью go-ethereum

В моей сети есть 2 узла майнеров с разблокированными учетными записями, а затем общедоступный узел с заблокированной учетной записью, который транслирует транзакции только майнерам.

Я запускаю общедоступный узел следующим образом:

geth --datadir standard1/ --syncmode 'full' --port 30392 --rpc --rpcport 9578 --rpccorsdomain '*' --rpcaddr 'MY PUBLIC ADDRESS HERE' --ws --wsaddr "MY PUBLIC ADDRESS HERE" --wsorigins "*" --wsport 9579 --wsapi 'db,eth,net,web3,txpool,miner' --networkid 22 --gasprice '1' 

Дело в том, что если кто-то отправит создание контракта общедоступному узлу (например, с помощью MyEtherWallet), отправка контракта будет транслироваться и добываться.

Я нашел это: https://ethereum.stackexchange.com/questions/11091/is-there-any-way-to-disable-contract-creation-on-a-private-network

Но..

а. как майнер может фильтровать транзакции? мне нужно создать свой собственный форк go-ethereum с определенной логикой для этого?

б. Есть ли способ ограничить создание контрактов? или способ разрешить развертывание только одного контракта?

c. Я могу запрашивать транзакции с помощью web3js и проверять создание контрактов, но есть ли способ удалить контракты, если я владею узлами майнинга / герметизации?

d. Может быть, я могу заблокировать адрес, с которого оформляется договор? это возможно?


person Marcos Martínez    schedule 30.10.2018    source источник
comment
Возможно, решение состоит в том, чтобы использовать параметр --nodiscover, чтобы в вашу сеть не добавлялись нежелательные узлы?   -  person Umberto Migliore    schedule 02.11.2018
comment
Это не ограничивает возможность пользователей попасть в мои узлы с транзакциями создания контрактов.   -  person Marcos Martínez    schedule 02.11.2018


Ответы (2)


Я думаю, что в Ethereum невозможно контролировать, кто может отправлять транзакции, поскольку это открытая сеть и общедоступный блокчейн. Если вы хотите реализовать это, и думаете, что вам нужно перейти на частный блокчейн, я бы порекомендовал hyperledger.

Даже если вы разветвляете geth, любой, у кого есть доступ к файлу Genesis и всему остальному, может подключиться к сети, а затем майнить транзакции создания контрактов на своих узлах.

person Paradox    schedule 03.11.2018
comment
Моя идея заключалась в том, чтобы создать форк, в котором транзакция развертывания контракта будет отфильтрована для принятия, только если они будут отправлены с определенных адресов. Затем я могу запретить другим узлам присоединяться к сети, если они не получат файл генезиса. Также у go-ethereum есть максимальное количество пиров, поэтому я могу установить его до предела узлов, над которыми я контролирую. - person Marcos Martínez; 04.11.2018
comment
В этом случае, я думаю, у вас нет другого выбора, кроме fork geth, а затем изменить его так, чтобы он принимал только запрос на создание контракта с определенного жестко запрограммированного адреса и вставлял файл генезиса в двоичный файл, а затем распространял двоичный файл для всех остальных для них чтобы иметь возможность подключиться к вашей сети. - person Paradox; 05.11.2018
comment
Но если вы хотите реализовать что-то подобное, почему бы вам не пойти с хайпледжером? Будет легче. - person Paradox; 05.11.2018
comment
Да, пока это единственный способ, который я нашел. Выбор эфириума был обязательным требованием: P - person Marcos Martínez; 05.11.2018

Если вы хотите поработать над разработкой, вы можете выполнить форк geth, чтобы удалить коды операций CREATE и CREATE2. Таким образом вы можете лишиться возможности создавать новые коды операций.

Если вы контролируете большую часть хэш-мощности в своей цепочке, вы можете запретить всем остальным выполнять транзакции майнинга с помощью этих кодов операций. Если кто-то подключается к вашей цепочке и добывает недействительную транзакцию, ваши узлы отбрасывают этот блок как недействительный и продолжают добывать ваши блоки.

person Marius van der Wijden    schedule 22.04.2020