6 "github.com/vapor/common"
7 "github.com/vapor/consensus"
8 "github.com/vapor/crypto"
9 chainjson "github.com/vapor/encoding/json"
10 "github.com/vapor/equity/pegin_contract"
11 "github.com/vapor/protocol/vm/vmutil"
12 "github.com/vapor/wallet"
15 type fundingResp struct {
16 MainchainAddress string `json:"mainchain_address"`
17 ControlProgram chainjson.HexBytes `json:"control_program,omitempty"`
18 ClaimScript chainjson.HexBytes `json:"claim_script"`
21 type BytomPeginRpc struct {
26 type ClaimArgs struct {
27 AccountID string `json:"account_id"`
28 AccountAlias string `json:"account_alias"`
31 func (b *BytomPeginRpc) GetPeginAddress() (interface{}, error) {
33 accountID := b.AccountID
34 if b.AccountAlias != "" {
35 account, err := b.Wallet.AccountMgr.FindByAlias(b.AccountAlias)
40 accountID = account.ID
43 mainchainAddress, claimScript, err := b.CreatePeginAddress(accountID, false)
49 MainchainAddress: mainchainAddress,
50 ClaimScript: claimScript,
54 func (b *BytomPeginRpc) GetPeginContractAddress() (interface{}, error) {
55 accountID := b.AccountID
56 if b.AccountAlias != "" {
57 account, err := b.Wallet.AccountMgr.FindByAlias(b.AccountAlias)
62 accountID = account.ID
65 mainchainAddress, controlProgram, claimScript, err := b.CreatePeginContractAddress(accountID, false)
71 MainchainAddress: mainchainAddress,
72 ControlProgram: controlProgram,
73 ClaimScript: claimScript,
77 func (b *BytomPeginRpc) CreatePeginAddress(accountID string, change bool) (string, []byte, error) {
79 claimCtrlProg, err := b.Wallet.AccountMgr.CreateAddress(b.AccountID, change)
83 claimScript := claimCtrlProg.ControlProgram
85 federationRedeemScript := vmutil.CalculateContract(consensus.ActiveNetParams.FedpegXPubs, claimScript)
87 scriptHash := crypto.Sha256(federationRedeemScript)
89 address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams)
94 return address.EncodeAddress(), claimScript, nil
98 func (b *BytomPeginRpc) GetPeginControlPrograms(claimScript []byte) (string, []byte) {
99 federationRedeemScript := vmutil.CalculateContract(consensus.ActiveNetParams.FedpegXPubs, claimScript)
100 scriptHash := crypto.Sha256(federationRedeemScript)
102 address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams)
107 redeemContract := address.ScriptAddress()
110 program, err = vmutil.P2WSHProgram(redeemContract)
115 return address.EncodeAddress(), program
118 func (b *BytomPeginRpc) CreatePeginContractPrograms(accountID string, change bool) (string, []byte, error) {
120 claimCtrlProg, err := b.Wallet.AccountMgr.CreateAddress(accountID, change)
124 claimScript := claimCtrlProg.ControlProgram
126 peginContractPrograms, err := pegin_contract.GetPeginContractPrograms(claimScript)
130 return hex.EncodeToString(peginContractPrograms), claimScript, nil
134 func (b *BytomPeginRpc) CreatePeginContractAddress(accountID string, change bool) (string, []byte, []byte, error) {
136 claimCtrlProg, err := b.Wallet.AccountMgr.CreateAddress(accountID, change)
138 return "", nil, nil, err
140 claimScript := claimCtrlProg.ControlProgram
142 peginContractPrograms, err := pegin_contract.GetPeginContractPrograms(claimScript)
144 return "", nil, nil, err
147 scriptHash := crypto.Sha256(peginContractPrograms)
149 address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams)
151 return "", nil, nil, err
154 redeemContract := address.ScriptAddress()
157 program, err = vmutil.P2WSHProgram(redeemContract)
159 return "", nil, nil, err
162 return address.EncodeAddress(), program, claimScript, nil
166 func (b *BytomPeginRpc) GetPeginContractControlPrograms(claimScript []byte) (string, []byte) {
168 peginContractPrograms, err := pegin_contract.GetPeginContractPrograms(claimScript)
172 scriptHash := crypto.Sha256(peginContractPrograms)
174 address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams)
179 redeemContract := address.ScriptAddress()
182 program, err = vmutil.P2WSHProgram(redeemContract)
187 return address.EncodeAddress(), program