Commit 6d6d870f authored by madengji's avatar madengji Committed by 33cn

para bind miner fix

parent 3abdcf52
...@@ -90,7 +90,7 @@ coinReward=18 ...@@ -90,7 +90,7 @@ coinReward=18
#发展基金奖励 #发展基金奖励
coinDevFund=12 coinDevFund=12
#如果超级节点上绑定了委托账户,则奖励超级节点coinBaseReward,其余部分(coinReward-coinBaseReward)按权重分给委托账户 #如果超级节点上绑定了委托账户,则奖励超级节点coinBaseReward,其余部分(coinReward-coinBaseReward)按权重分给委托账户
coinBaseReward=5 coinBaseReward=3
#委托账户最少解绑定时间(按小时) #委托账户最少解绑定时间(按小时)
unBindTime=24 unBindTime=24
......
...@@ -54,6 +54,7 @@ function para_set_toml() { ...@@ -54,6 +54,7 @@ function para_set_toml() {
sed -i $xsedfix 's/^mainLoopCheckCommitTxDoneForkHeight=.*/mainLoopCheckCommitTxDoneForkHeight='''$MainLoopCheckForkHeight'''/g' "${1}" sed -i $xsedfix 's/^mainLoopCheckCommitTxDoneForkHeight=.*/mainLoopCheckCommitTxDoneForkHeight='''$MainLoopCheckForkHeight'''/g' "${1}"
sed -i $xsedfix 's/^mainBlockHashForkHeight=.*/mainBlockHashForkHeight=1/g' "${1}" sed -i $xsedfix 's/^mainBlockHashForkHeight=.*/mainBlockHashForkHeight=1/g' "${1}"
sed -i $xsedfix 's/^unBindTime=.*/unBindTime=0/g' "${1}"
#blsSign case #blsSign case
if [ -n "$3" ]; then if [ -n "$3" ]; then
......
...@@ -545,7 +545,7 @@ func createNodeBindTx(cmd *cobra.Command, args []string) { ...@@ -545,7 +545,7 @@ func createNodeBindTx(cmd *cobra.Command, args []string) {
paraName, _ := cmd.Flags().GetString("paraName") paraName, _ := cmd.Flags().GetString("paraName")
action, _ := cmd.Flags().GetUint32("action") action, _ := cmd.Flags().GetUint32("action")
node, _ := cmd.Flags().GetString("node") node, _ := cmd.Flags().GetString("node")
coins, _ := cmd.Flags().GetUint32("coins") coins, _ := cmd.Flags().GetUint64("coins")
if !strings.HasPrefix(paraName, "user.p") { if !strings.HasPrefix(paraName, "user.p") {
fmt.Fprintln(os.Stderr, "paraName is not right, paraName format like `user.p.guodun.`") fmt.Fprintln(os.Stderr, "paraName is not right, paraName format like `user.p.guodun.`")
...@@ -556,7 +556,7 @@ func createNodeBindTx(cmd *cobra.Command, args []string) { ...@@ -556,7 +556,7 @@ func createNodeBindTx(cmd *cobra.Command, args []string) {
fmt.Fprintln(os.Stderr, "coins should bigger than 0") fmt.Fprintln(os.Stderr, "coins should bigger than 0")
} }
payload := &pt.ParaBindMinerInfo{BindAction: int32(action), BindCount: int64(coins), TargetAddr: node} payload := &pt.ParaBindMinerInfo{BindAction: int32(action), BindCount: int64(coins), TargetNode: node}
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: getRealExecName(paraName, pt.ParaX), Execer: getRealExecName(paraName, pt.ParaX),
ActionName: "ParaBindMiner", ActionName: "ParaBindMiner",
...@@ -587,8 +587,7 @@ func addNodeBindCmdFlags(cmd *cobra.Command) { ...@@ -587,8 +587,7 @@ func addNodeBindCmdFlags(cmd *cobra.Command) {
func nodeBindInfo(cmd *cobra.Command, args []string) { func nodeBindInfo(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
addr, _ := cmd.Flags().GetString("node")
addr, _ := cmd.Flags().GetString("addr")
var params rpctypes.Query4Jrpc var params rpctypes.Query4Jrpc
params.Execer = pt.ParaX params.Execer = pt.ParaX
......
...@@ -195,7 +195,3 @@ func calcParaBindMinerAddr(node, bind string) []byte { ...@@ -195,7 +195,3 @@ func calcParaBindMinerAddr(node, bind string) []byte {
func calcParaBindMinerNode(node string) []byte { func calcParaBindMinerNode(node string) []byte {
return []byte(paraBindMinderNode + node) return []byte(paraBindMinderNode + node)
} }
func calcParaBindMinerNodePrefix() []byte {
return []byte(paraBindMinderNode)
}
...@@ -537,12 +537,13 @@ func (p *Paracross) Query_GetHeight(req *types.ReqString) (*pt.ParacrossConsensu ...@@ -537,12 +537,13 @@ func (p *Paracross) Query_GetHeight(req *types.ReqString) (*pt.ParacrossConsensu
// Query_GetNodeBindMinerList query get super node bind miner list // Query_GetNodeBindMinerList query get super node bind miner list
func (p *Paracross) Query_GetNodeBindMinerList(in *types.ReqString) (types.Message, error) { func (p *Paracross) Query_GetNodeBindMinerList(in *types.ReqString) (types.Message, error) {
if in == nil || len(in.Data) == 0 { if in == nil || len(in.Data) == 0 {
return nil, errors.Wrapf(types.ErrInvalidParam, "in=%v", in) return nil, types.ErrInvalidParam
} }
list, err := getBindNodeInfo(p.GetStateDB(), in.Data) list, err := getBindNodeInfo(p.GetStateDB(), in.Data)
if err != nil { if err != nil {
return nil, err clog.Error("Query_GetNodeBindMinerList get node", "err", err, "req", in.Data)
return nil, errors.Cause(err)
} }
var resp pt.RespParaNodeBindList var resp pt.RespParaNodeBindList
...@@ -551,10 +552,18 @@ func (p *Paracross) Query_GetNodeBindMinerList(in *types.ReqString) (types.Messa ...@@ -551,10 +552,18 @@ func (p *Paracross) Query_GetNodeBindMinerList(in *types.ReqString) (types.Messa
for _, addr := range list.Miners { for _, addr := range list.Miners {
info, err := getBindAddrInfo(p.GetStateDB(), in.Data, addr) info, err := getBindAddrInfo(p.GetStateDB(), in.Data, addr)
if err != nil { if err != nil {
return nil, err clog.Error("Query_GetNodeBindMinerList get addr", "err", err, "node", in.Data, "addr", addr)
return nil, errors.Cause(err)
} }
resp.Details = append(resp.Details, info) resp.Details = append(resp.Details, info)
} }
info, err := getBindAddrInfo(p.GetStateDB(), in.Data, "1E5saiXVb9mW8wcWUUZjsHJPZs5GmdzuSY")
if err != nil {
clog.Error("Query_GetNodeBindMinerList get addr", "err", err, "node", in.Data, "addr", "1E5saiXVb9mW8wcWUUZjsHJPZs5GmdzuSY")
return nil, errors.Cause(err)
}
resp.Details = append(resp.Details, info)
return &resp, nil return &resp, nil
} }
...@@ -242,7 +242,7 @@ func makeNodeBindReceipt(addr string, prev, current *pt.ParaNodeBindList) *types ...@@ -242,7 +242,7 @@ func makeNodeBindReceipt(addr string, prev, current *pt.ParaNodeBindList) *types
//绑定到超级节点 //绑定到超级节点
func (a *action) bind2Node(node string) (*types.Receipt, error) { func (a *action) bind2Node(node string) (*types.Receipt, error) {
info, err := getBindNodeInfo(a.db, node) info, err := getBindNodeInfo(a.db, node)
if !isNotFound(errors.Cause(err)) { if err != nil && !isNotFound(errors.Cause(err)) {
return nil, errors.Wrap(err, "bind2Node") return nil, errors.Wrap(err, "bind2Node")
} }
...@@ -314,13 +314,17 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) { ...@@ -314,13 +314,17 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
return nil, errors.Wrapf(types.ErrInvalidParam, "bindMiner bindCount nil from addr %s", a.fromaddr) return nil, errors.Wrapf(types.ErrInvalidParam, "bindMiner bindCount nil from addr %s", a.fromaddr)
} }
ok, err := a.isValidSuperNode(cmd.TargetAddr) ok, err := a.isValidSuperNode(cmd.TargetNode)
if err != nil || !ok { if err != nil {
return nil, errors.Wrapf(err, "invalid target node=%s", cmd.TargetAddr) return nil, err
}
//非有效超级节点
if !ok {
return nil, errors.Wrapf(types.ErrInvalidParam, "invalid target node=%s", cmd.TargetNode)
} }
current, err := getBindAddrInfo(a.db, cmd.TargetAddr, a.fromaddr) current, err := getBindAddrInfo(a.db, cmd.TargetNode, a.fromaddr)
if !isNotFound(errors.Cause(err)) { if err != nil && !isNotFound(errors.Cause(err)) {
return nil, errors.Wrap(err, "getBindAddrInfo") return nil, errors.Wrap(err, "getBindAddrInfo")
} }
...@@ -332,24 +336,23 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) { ...@@ -332,24 +336,23 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
return nil, errors.Wrapf(types.ErrInvalidParam, "bind coins same current=%d, cmd=%d", current.BindCount, cmd.BindCount) return nil, errors.Wrapf(types.ErrInvalidParam, "bind coins same current=%d, cmd=%d", current.BindCount, cmd.BindCount)
} }
//释放一部分冻结coins //释放一部分coins
if cmd.BindCount < current.BindCount { if cmd.BindCount < current.BindCount {
receipt, err = a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, (current.BindCount-cmd.BindCount)*types.Coin) receipt, err = a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, (current.BindCount-cmd.BindCount)*types.Coin)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "bindOp Active addr=%s,execaddr=%s,coins=%d", a.fromaddr, a.execaddr, current.BindCount-cmd.BindCount) return nil, errors.Wrapf(err, "bindOp Active addr=%s,execaddr=%s,coins=%d", a.fromaddr, a.execaddr, current.BindCount-cmd.BindCount)
} }
} } else {
//冻结更多 //冻结更多
receipt, err = a.coinsAccount.ExecFrozen(a.fromaddr, a.execaddr, (cmd.BindCount-current.BindCount)*types.Coin) receipt, err = a.coinsAccount.ExecFrozen(a.fromaddr, a.execaddr, (cmd.BindCount-current.BindCount)*types.Coin)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "bindOp frozen more addr=%s,execaddr=%s,coins=%d", a.fromaddr, a.execaddr, cmd.BindCount-current.BindCount) return nil, errors.Wrapf(err, "bindOp frozen more addr=%s,execaddr=%s,coins=%d", a.fromaddr, a.execaddr, cmd.BindCount-current.BindCount)
} }
}
acctCopy := *current acctCopy := *current
current.BindCount = cmd.BindCount current.BindCount = cmd.BindCount
r := makeAddrBindReceipt(cmd.TargetNode, a.fromaddr, &acctCopy, current)
r := makeAddrBindReceipt(cmd.TargetAddr, a.fromaddr, &acctCopy, current)
return mergeReceipt(receipt, r), nil return mergeReceipt(receipt, r), nil
} }
...@@ -366,13 +369,13 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) { ...@@ -366,13 +369,13 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
BindCount: cmd.BindCount, BindCount: cmd.BindCount,
BlockTime: a.blocktime, BlockTime: a.blocktime,
BlockHeight: a.height, BlockHeight: a.height,
TargetAddr: cmd.TargetAddr, TargetNode: cmd.TargetNode,
} }
rBind := makeAddrBindReceipt(cmd.TargetAddr, a.fromaddr, nil, acct) rBind := makeAddrBindReceipt(cmd.TargetNode, a.fromaddr, nil, acct)
mergeReceipt(receipt, rBind) mergeReceipt(receipt, rBind)
//增加到列表中 //增加到列表中
rList, err := a.bind2Node(cmd.TargetAddr) rList, err := a.bind2Node(cmd.TargetNode)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -382,15 +385,15 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) { ...@@ -382,15 +385,15 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
} }
func (a *action) unBindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) { func (a *action) unBindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
acct, err := getBindAddrInfo(a.db, cmd.TargetAddr, a.fromaddr) acct, err := getBindAddrInfo(a.db, cmd.TargetNode, a.fromaddr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
cfg := a.api.GetConfig() cfg := a.api.GetConfig()
unBindHours := cfg.MGInt("mver.consensus.paracross.unBindTime", a.height) unBindHours := cfg.MGInt("mver.consensus.paracross.unBindTime", a.height)
if acct.BlockTime-a.blocktime < unBindHours*60*60 { if a.blocktime-acct.BlockTime < unBindHours*60*60 {
return nil, errors.Wrapf(err, "unBindOp unbind time=%d less %d hours than bind time =%d", a.blocktime, unBindHours, acct.BlockTime) return nil, errors.Wrapf(types.ErrNotAllow, "unBindOp unbind time=%d less %d hours than bind time =%d", a.blocktime, unBindHours, acct.BlockTime)
} }
//unfrozen //unfrozen
...@@ -400,11 +403,11 @@ func (a *action) unBindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) { ...@@ -400,11 +403,11 @@ func (a *action) unBindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
} }
//删除 bind addr //删除 bind addr
rUnBind := makeAddrBindReceipt(cmd.TargetAddr, a.fromaddr, acct, nil) rUnBind := makeAddrBindReceipt(cmd.TargetNode, a.fromaddr, acct, nil)
mergeReceipt(receipt, rUnBind) mergeReceipt(receipt, rUnBind)
//从列表删除 //从列表删除
rUnList, err := a.unbind2Node(cmd.TargetAddr) rUnList, err := a.unbind2Node(cmd.TargetNode)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -414,8 +417,8 @@ func (a *action) unBindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) { ...@@ -414,8 +417,8 @@ func (a *action) unBindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
} }
func (a *action) bindMiner(info *pt.ParaBindMinerInfo) (*types.Receipt, error) { func (a *action) bindMiner(info *pt.ParaBindMinerInfo) (*types.Receipt, error) {
if len(info.TargetAddr) <= 0 { if len(info.TargetNode) <= 0 {
return nil, errors.Wrapf(types.ErrInvalidParam, "bindMiner targetAddr should not be nil to addr %s", a.fromaddr) return nil, errors.Wrapf(types.ErrInvalidParam, "bindMiner TargetNode should not be nil to addr %s", a.fromaddr)
} }
//只允许平行链操作 //只允许平行链操作
......
...@@ -163,7 +163,7 @@ message ParaBindMinerInfo{ ...@@ -163,7 +163,7 @@ message ParaBindMinerInfo{
string addr = 1; // miner addr string addr = 1; // miner addr
int32 bindAction = 2; // 1: bind, 2:unbind int32 bindAction = 2; // 1: bind, 2:unbind
int64 bindCount = 3; // bind coins count int64 bindCount = 3; // bind coins count
string targetAddr = 4; // super node addr string targetNode = 4; // super node addr
int64 blockTime = 5; // action bind block time int64 blockTime = 5; // action bind block time
int64 blockHeight = 6; // action bind block height int64 blockHeight = 6; // action bind block height
} }
...@@ -334,6 +334,7 @@ message ParacrossAction { ...@@ -334,6 +334,7 @@ message ParacrossAction {
ParaNodeGroupConfig nodeGroupConfig = 10; ParaNodeGroupConfig nodeGroupConfig = 10;
ParaStageConfig selfStageConfig = 11; ParaStageConfig selfStageConfig = 11;
CrossAssetTransfer crossAssetTransfer = 12; CrossAssetTransfer crossAssetTransfer = 12;
ParaBindMinerInfo paraBindMiner = 13;
} }
int32 ty = 2; int32 ty = 2;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment