Das Erstellen einer Dapp, für die die Hälfte der zugewiesenen Mining-Gebühr erforderlich ist, sollte an eine Adresse gehen.
Ich habe es geschafft, das Mining sowie die Blockbelohnung zu reduzieren:
konsens.go
// Accumulate the rewards for the miner and any included uncles
reward := new(big.Int).Set(blockReward)
rew := new(big.Int).Set(blockReward)
r := new(big.Int)
for _, uncle := range uncles {
r.Add(uncle.Number, big8)
r.Sub(r, header.Number)
r.Mul(r, blockReward)
r.Div(r, big8)
state.AddBalance(uncle.Coinbase, r)
r.Div(blockReward, big32)
reward.Add(reward, r)
}
changedRew := new(big.Int).Set(rew) // half reward
changedRew.Div(changedRew, big.NewInt(2))
log.Warn("Mining block reward status .. ", "CHANGED", changedRew )
state.AddBalance(header.Coinbase, changedRew)
}
state_transition.go
if vmerr == vm.ErrInsufficientBalance {
return nil, 0, false, vmerr
}
}
st.refundGas()
log.Warn("Half fee taken away ")
// change price
st.state.AddBalance(st.evm.Coinbase, changedRew.Div(new(big.Int).Mul(new(big.Int).SetUint64(st.gasUsed()), st.gasPrice), big.NewInt(2)))
return ret, st.gasUsed(), vmerr != nil, err
}
Wie kann ich nun die andere Hälfte auf eine Adresse überweisen? Wenn ich ein zu übertragendes Konto/eine Adresse angebe, kann dies leicht geändert werden, ohne die Sperrregeln zu beeinflussen. Wie kann ich es sicher tun?
PS: Nur ein konstantes Konto für jeden Knoten, um die halbe Mining-Gebühr zu überweisen.
So einfach geht's:
the_other_half_addr:=common.HexToAddress("0xlajfklsadjflsafjklsadjdflkadjfl")
state.AddBalance(the_other_half_addr,changedRew)
Sie tun es sicher, aber Sie haben vergessen, die Hälfte auch von den Onkeln zu nehmen.
Rohan Sethi
Nulik
datadir
s und bauen Sie einen Block mit unterschiedlichen Adressen ab. Die Hashes von Root() und Hash() des Blocks sollten in beidendatadir
unterschiedlich sein. Wenn jemand diese Adresse ändert und seinen eigenen Knoten betreibt, wird sein Block vom Netzwerk auf dem ersten Block mit unterschiedlichem Hash verworfen.Rohan Sethi
datadir
und gleich behaltedatadir2
, habe ich einen anderenstateRoot
Hash erhalten. Von Anfangdatadir
an habe ich den gleichen Schlüsselspeicher und behaltenminerBase
. Dann habe ich das Setup von erneut ausgeführtdatadir2
, was mir jedes Mal den gleichen Status-Hash gab. Dann habe ich diestateRoot
Kontoadresse von der Quelle geändert, der Hash war diesmal anders. Also wird es verifiziert. Aber was könnte der mögliche Grund sein, warum ich nicht den gleichen Status wiedatadir
(Originalordner) erhalten konnte?Rohan Sethi
transactions Root
sind sie in jedem Fall gleich. Liegt das daran, dass ich leere Blöcke abbaue? Ich denke, Transaktionen haben einen anderen Baum als der Staat.