Permissioned Proof of Work Consensus

+2 votes
Is it possible to have consensus by permissioned mining and Proof of Work at the same time? So valid blocks would have to satisfy being signed according to the mining-diversit/round robin rules and also have sufficient proof of work.I have been trying to setup a small 3 node testnetwork to understand how it works. I tried with permissioned and unpermissend mining, but both chains froze after some blocks. The cause seems to be the fast climb of difficulty until halt (within the setup phase). Maybe the "target-adjust-freq" of 120 seconds is the trouble. Maybe someone has some hints for me. Here is the configuration I was using:

{
    "chain-protocol" : "multichain",
    "chain-description" : "TestChain",
    "root-stream-name" : "root",
    "root-stream-open" : false,
    "chain-is-testnet" : true,
    "target-block-time" : 120,
    "maximum-block-size" : 2000000,
    "default-network-port" : 4801,
    "default-rpc-port" : 4800,
    "anyone-can-connect" : true,
    "anyone-can-send" : true,
    "anyone-can-receive" : true,
    "anyone-can-receive-empty" : true,
    "anyone-can-create" : false,
    "anyone-can-issue" : false,
    "anyone-can-mine" : true,
    "anyone-can-activate" : false,
    "anyone-can-admin" : false,
    "support-miner-precheck" : true,
    "allow-p2sh-outputs" : true,
    "allow-multisig-outputs" : true,
    "setup-first-blocks" : 30,
    "mining-diversity" : 0.30000000,
    "admin-consensus-upgrade" : 0.70000000,
    "admin-consensus-admin" : 0.70000000,
    "admin-consensus-activate" : 0.50000000,
    "admin-consensus-mine" : 0.30000000,
    "admin-consensus-create" : 0.30000000,
    "admin-consensus-issue" : 0.30000000,
    "lock-admin-mine-rounds" : 10,
    "mining-requires-peers" : true,
    "mine-empty-rounds" : -1.00000000,
    "mining-turnover" : 0.80000000,
    "first-block-reward" : -1,
    "initial-block-reward" : 1000000000,
    "reward-halving-interval" : 1050000,
    "reward-spendable-delay" : 1,
    "minimum-per-output" : 1,
    "maximum-per-output" : 100000000000000,
    "minimum-relay-fee" : 1,
    "native-currency-multiple" : 100000000,
    "skip-pow-check" : false,
    "pow-minimum-bits" : 10,
    "target-adjust-freq" : 120,
    "allow-min-difficulty-blocks" : true,
    "only-accept-std-txs" : true,
    "max-std-tx-size" : 65536,
    "max-std-op-returns-count" : 10,
    "max-std-op-return-size" : 16384,
    "max-std-op-drops-count" : 5,
    "max-std-element-size" : 8192,
    "chain-name" : "cbpt",
    "protocol-version" : 10008,
    "network-message-start" : "f1dcd9fb",
    "address-pubkeyhash-version" : "0081e1da",
    "address-scripthash-version" : "0515dce4",
    "private-key-version" : "8076512d",
    "address-checksum-value" : "42690e8c",
    "genesis-pubkey" : "03dc2e2bd584e8dab1e1c83c2c08fd4fdfb6a53a55256fc203e1c7c860c8415225",
    "genesis-version" : 1,
    "genesis-timestamp" : 1492215814,
    "genesis-nbits" : 524287999,
    "genesis-nonce" : 1406,
    "genesis-pubkey-hash" : "23b561da559aad2ae03c23c604c21389070f67e8",
    "genesis-hash" : "002b9ff733a52507d8426e373a78b348d5b68d4db15b90011553433d696bbb9c",
    "chain-params-hash" : "7c167e3207d72146b56b8ec2f7dc6f928cb30c51d0a3700af780e6acc5db45a6"
}
asked Apr 15, 2017 by titusz

1 Answer

+2 votes

First I don't see the sense in using both proof of work and mining diversity. If you're using permissioning and mining diversity to prevent centralized mining, why make the mining nodes work so hard as well?

In any event, yes, your target-adjust-freq should be significantly higher than the target-block-time, otherwise the difficulty will be readjusted after every block, and this will lead to instability in the difficulty level. Both are measured in seconds.

answered Apr 16, 2017 by MultiChain
Assuming a consortium chain with 100 participants that all have mining permissions. If one participant wants to put an unproportional amount of strain on the network (heavy stream usage for example) he could compensate the other participants with native currency transaction fees that he earns by competing for generating up to lets say 30% of the blocks. Does this make sense or am I missing something?
It kind of makes sense, but still seems odd to impose the cost of proof-of-work ok everyone when it's not necessary. Instead, why not just distribute the native currency to all participants equally, then let them buy/sell it from each other when necessary? It will end up cheaper overall.
...