Hot answers tagged

6

Since some moderator decided to delete the only answer to this question here it is again: I do not have time to summarize it. Good question! I don't have an answer but I do have a link that might be worth reading In this paper we derive the functioning of two prominent consensus algorithms for permissioned blockchains based on the PoA ...


6

Use something like this: { "config": { "chainId": <yourChainId>, "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "clique": { "period": <yourPeriodInSecs>, "epoch": <yourEpochInBlocks> } }, "...


6

The Görli testnet is all about bringing cross compatibility across the different Ethereum clients. Historically, the only cross client testnet was Ropsten, which used Ethereum's mainnet PoW algorithm. However, since the testnet holds no value and provides no incentive to miners, it was hard to maintain a strong and resistant network. In fact, the network ...


5

You can create a new account from other network then import the Keystore file to your private network. The steps I took was Generate a Genesis.json file of a PoW private network from Puppeth Geth init Geth attach Generate a new account Delete the geth folder in the datadir Use Puppeth to create a new Genesis.json that use Clique and put the address that ...


4

All the details are documented here: https://github.com/ethereum/EIPs/issues/225 In short, the facts for a system with N sealers: every block has a preferred sealer (in-turn signing), which will set the block difficulty to 2 if the preferred sealer does not sign the block, other sealers can jump in (out-of-turn), but they can set the block difficulty only ...


4

I've had the same issue. It appears that --nodiscover is just disabling your node from running node-discovering algorithm to find peers to connect, but it doesn't prevent others from discovering and attempting to connect to your node. If you'd like to limit the inbound connection attempts, you could specify --netrestrict. e.g. --netrestrict="127.0.0.1/8"


4

Geth doesn't have a predefined flag to achieve this but you can write and then --preload .js files in geth - I use this approach on our private network to only seal blocks when there are new transactions.


4

eth.coinbase has to point to the sealing account. If you want to remove again the second account, both accounts will have to propose the removal. You always need 50% + 1 vote, which is 2 for 2 accounts.


4

This issue has been solved by the go-ethereum team. @karalabe: The transaction should propagate across the network at the same time. It however is not included in the current block, because the block currently being mined is already finalized. It's expensive to recreate a new block every time a new transaction pops up. And in the case of ...


4

Non-mining sealer node which is also called non-validator nodes is just deployed so developers and users can connect with these nodes and can interact with the blockchain. As sealer nodes are critical so this is not opened to all. Few non-validators nodes are also good to run so that other non trusted users can connect to our network with limited access.


4

This paper addresses detail comparison of Aura, Clique and PBFT. The key difference in terms of latency according to this paper is : In Aura, each block proposal requires two message rounds: in the first round the leader sends the proposed block to all the other authorities, in the second round each authority sends the received block to all the other ...


4

The problem was the signers does not recognize some past block became invalid. As a solution, first I have updated geth version of signer nodes to equal or above to v1.8.16. Later, I have rewind the chain back to the faulty snapshot block (epoch transition) for all the signer nodes using debug.setHead("0x124F80") (1200000th block). Site to convert ...


4

Pantheon (0.8.1) has no account management. It will only create a server private key, which is stored unencrypted in datadir/key. This key will also be used as the sealer account in Clique-PoA. Hence the public address stored in extraData in genesis.json has to correspond to this private key.


3

Since nobody has provided an answer so far, I'll try to summarize my research on this. If someone is able to provide a better "story", I will switch the checkmark to it. After reading the pBFT paper from Castor/Liskov, I believe that 66,6% + 1 rule from pBFT also applies for Clique too. Hence, 50% + 1 is not enough to be sure that the transaction can not be ...


3

I faced a similar problem a while ago, there was a bottleneck on the time it took transactions to reach the mempool, this was due to the way I was sending them and the fact that they were being signed at node level. That added a pretty big overhead. The solution I found is to replicate a more real environment. Sign all transactions locally (pre-signed them)...


3

clique API is a geth specific extension. You can enable this with --rpcapi clique Then you can send the corresponding JSON RPC calls. E.g. curl -X POST --data '{"jsonrpc":"2.0","method":"clique_getSnapshot","params":[],"id":1}' http://localhost:8545 curl -X POST --data '{"jsonrpc":"2.0","method":"clique_getSigners","params":[],"id":1}' http://localhost:...


3

yes, have a look at my current question: parity TPS optimization - please help = I could not really accelerate parity yet. For now, geth looks MUCH faster. Feel free to run your own benchmarks, it is easy with chainhammer & chainreader. Please report back what you find out. Thanks.


3

Clique requires int(N/2+1) sealers (where N is the number of sealers defined in the genesis file — in extraData field) to be online in order to run. thx to Ivica Aracic for pointing out that clique PoA DOES WORK with a single node. For any reason I missed that and I apologize for the confusion. With a single node, we just need (A) create genesis ...


2

Have you created any sealer accounts prior to creating the genesis file? if not, create at least one sealer account first by running the following: geth account new --datadir /path/to/your/custom/datadir Note down the address this generates, then when you run puppeth you can add this address into the pre-defined list of sealer accounts during the genesis ...


2

Simply unlock your account with personal.unlockAccount(eth.accounts[0], "Password", 86400) Note: The last parameter is time to leave account unlocked in seconds. Then, start the mining miner.start();


2

I think the reason is this in Clique Any change needs to be proposed by 50%+1 nodes in the network for it to come into effect. For 2 signers, 50%+1 is actually two. You need to have your second signer vote itself out too. from karalabe's comment on https://github.com/ethereum/go-ethereum/issues/14451


2

When you have 3 signers, at least 2 have to be online and have the eth.coinbase account unlocked to be able to continue sealing new blocks. Otherwise the sealing process stops with "Signed recently, must wait for others". If you're sure that your sealers are online, then the only logical explaination is that your account unlock has ran into a timeout (...


2

Ethash is the Proof-of-Work algorithm used by Ethereum. Design rationale and an explanation of the algorithm in pseudo-code can be found on the wiki (and has been discussed in previous questions - see: What proof of work function does Ethereum use?). Clique is the protocol used in Ethereum's Proof-of-Authority testnet, named Rinkeby. If you're really ...


2

Clique extradata field, used to define PoA validators/sealers must match the following format: First part: 32bytes vanity, meaning whatever you want here since it's expressed as an hex string (64 chars long as one byte is 2 chars), here in the example it's just zeros. Second part: concatenated list of sealers/validators nodes addresses. Each address written ...


2

I've read some docs online that to get the miner/sealer/signer address of a particular block that runs with the Ethereum PoA/Clique consensus (the Rinkeby testnet for example), I need to call the clique_getSnapshot RPC interface. However when I tried it with a infura Rinkeby endpoint, it returns "The method clique_getSnapshot does not exist/is not ...


2

Thanks a lot for helps from @Ha ĐANG I finally reached this solution const Web3 = require("web3"); const web3 = new Web3("https://rinkeby.infura.io/v3/xxxxxx"); // infura Rinkeby endpoint const eju = require("ethereumjs-utils"); (async () => { let blk = await web3.eth.getBlock(4753195); let header = [ eju.toBuffer(...


2

The section Setting Up Networking here describes how to run a bootstrap node. It looks like you just need to provide the flag --nat with the IP address of the computer/server running the code when you run the geth command. You need to make sure you have the port you are using open appropriately as well. You can then use the geth console geth attach data/...


1

Yay, sweet self answer. It seems that bootnodes and sealer nodes are quite different and incompatible. To bootstrap the system I tried to add other peers in the bootnode list. What it does is that the node will try to send those PING/v4 requests that will be unanswered, and cause the peer to be dropped, then re-adding it immediately. Verdict: only bootnodes ...


1

AFAIK, ethereum will reorg and choose the chain with more difficulty. in the PoA, if the signer is in-turn the difficulty is 2 and 1 when out-turn.


1

You can consider a transaction 100% final, if there is an upper limit to network delay between nodes and 51% of validators are honest and have signed your block. If you can't guarantee 51% honest validators, you need 100% of validators signing your block, 66% of them being selfish and 1 being honest.


Only top voted, non community-wiki answers of a minimum length are eligible