-
Notifications
You must be signed in to change notification settings - Fork 0
/
account_lock_governing.go
67 lines (59 loc) · 1.68 KB
/
account_lock_governing.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package reward
import (
"math/big"
"github.com/saolacoincom/saolacoin/meter"
"github.com/saolacoincom/saolacoin/script"
"github.com/saolacoincom/saolacoin/script/accountlock"
"github.com/saolacoincom/saolacoin/tx"
"github.com/ethereum/go-ethereum/rlp"
)
func BuildAccountLockGoverningTx(chainTag byte, bestNum uint32, curEpoch uint32) *tx.Transaction {
// 1. signer is nil
// 1. transaction in kblock.
builder := new(tx.Builder)
builder.ChainTag(chainTag).
BlockRef(tx.NewBlockRef(bestNum + 1)).
Expiration(720).
GasPriceCoef(0).
Gas(meter.BaseTxGas * 10). //buffer for builder.Build().IntrinsicGas()
DependsOn(nil).
Nonce(12345678)
builder.Clause(
tx.NewClause(&accountlock.AccountLockAddr).
WithValue(big.NewInt(0)).
WithToken(meter.MTRG).
WithData(buildAccoutLockGoverningData(curEpoch)))
builder.Build().IntrinsicGas()
return builder.Build()
}
/////// account lock governing
func buildAccoutLockGoverningData(curEpoch uint32) (ret []byte) {
ret = []byte{}
body := &accountlock.AccountLockBody{
Opcode: accountlock.OP_GOVERNING,
Version: curEpoch,
Option: uint32(0),
}
payload, err := rlp.EncodeToBytes(body)
if err != nil {
logger.Info("encode payload failed", "error", err.Error())
return
}
// fmt.Println("Payload Hex: ", hex.EncodeToString(payload))
s := &script.Script{
Header: script.ScriptHeader{
Version: uint32(0),
ModID: script.ACCOUNTLOCK_MODULE_ID,
},
Payload: payload,
}
data, err := rlp.EncodeToBytes(s)
if err != nil {
return
}
data = append(script.ScriptPattern[:], data...)
prefix := []byte{0xff, 0xff, 0xff, 0xff}
ret = append(prefix, data...)
// fmt.Println("script Hex:", hex.EncodeToString(ret))
return
}