Создание децентрализованного приложения, для которого требуется половина выделенной платы за майнинг, должно осуществляться по адресу.
Мне удалось сократить майнинг, а также награду за блок:
консенсус.го
// 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
}
Как мне теперь перевести вторую половину на адрес? Если я укажу учетную запись/адрес для передачи, это можно легко изменить, не влияя на правила блокировки. Как я могу сделать это безопасно?
PS: Только одна постоянная учетная запись для каждого узла для перевода половины платы за майнинг.
Так просто:
the_other_half_addr:=common.HexToAddress("0xlajfklsadjflsafjklsadjdflkadjfl")
state.AddBalance(the_other_half_addr,changedRew)
Вы делаете это надежно, но вы забыли взять половинку и у дядек.
Рохан Сети
Нулик
datadir
s и майните один блок с разными адресами. Хеши Root() и Hash() блока должны быть разными в обоихdatadir
s. Если кто-то изменит этот адрес и запустит свой собственный узел, его блок будет отброшен сетью в первом блоке с другим хешем.Рохан Сети
datadir
иdatadir2
дало мне другойstateRoot
хэш. С самого началаdatadir
я сохранил одно и то же хранилище ключей иminerBase
. Затем я повторно запустил настройку изdatadir2
, которая каждый раз давала мне один и тот же хэш состояния. Затем я изменил адрес аккаунта из источника, на этотstateRoot
раз хеш был другим. Так что он его проверяет. Но что может быть возможной причиной, по которой я не смог получить тот же корень состояния, что иdatadir
(исходная папка)?Рохан Сети
transactions Root
они одинаковы во всех случаях. Это потому, что я добываю пустые блоки? Я думаю, что у транзакций другое дерево, чем у состояния.