+++ /dev/null
-package rpc
-
-import (
- "encoding/hex"
-
- "github.com/vapor/common"
- "github.com/vapor/consensus"
- "github.com/vapor/crypto"
- chainjson "github.com/vapor/encoding/json"
- "github.com/vapor/equity/pegin_contract"
- "github.com/vapor/protocol/vm/vmutil"
- "github.com/vapor/wallet"
-)
-
-type fundingResp struct {
- MainchainAddress string `json:"mainchain_address"`
- ControlProgram chainjson.HexBytes `json:"control_program,omitempty"`
- ClaimScript chainjson.HexBytes `json:"claim_script"`
-}
-
-type BytomPeginRpc struct {
- ClaimArgs
- Wallet *wallet.Wallet
-}
-
-type ClaimArgs struct {
- AccountID string `json:"account_id"`
- AccountAlias string `json:"account_alias"`
-}
-
-func (b *BytomPeginRpc) GetPeginAddress() (interface{}, error) {
-
- accountID := b.AccountID
- if b.AccountAlias != "" {
- account, err := b.Wallet.AccountMgr.FindByAlias(b.AccountAlias)
- if err != nil {
- return nil, err
- }
-
- accountID = account.ID
- }
-
- mainchainAddress, claimScript, err := b.CreatePeginAddress(accountID, false)
- if err != nil {
- return nil, err
- }
-
- return &fundingResp{
- MainchainAddress: mainchainAddress,
- ClaimScript: claimScript,
- }, nil
-}
-
-func (b *BytomPeginRpc) GetPeginContractAddress() (interface{}, error) {
- accountID := b.AccountID
- if b.AccountAlias != "" {
- account, err := b.Wallet.AccountMgr.FindByAlias(b.AccountAlias)
- if err != nil {
- return nil, err
- }
-
- accountID = account.ID
- }
-
- mainchainAddress, controlProgram, claimScript, err := b.CreatePeginContractAddress(accountID, false)
- if err != nil {
- return nil, err
- }
-
- return &fundingResp{
- MainchainAddress: mainchainAddress,
- ControlProgram: controlProgram,
- ClaimScript: claimScript,
- }, nil
-}
-
-func (b *BytomPeginRpc) CreatePeginAddress(accountID string, change bool) (string, []byte, error) {
- // 通过配置获取
- claimCtrlProg, err := b.Wallet.AccountMgr.CreateAddress(b.AccountID, change)
- if err != nil {
- return "", nil, err
- }
- claimScript := claimCtrlProg.ControlProgram
-
- federationRedeemScript := vmutil.CalculateContract(consensus.ActiveNetParams.FedpegXPubs, claimScript)
-
- scriptHash := crypto.Sha256(federationRedeemScript)
-
- address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams)
- if err != nil {
- return "", nil, err
- }
-
- return address.EncodeAddress(), claimScript, nil
-
-}
-
-func (b *BytomPeginRpc) GetPeginControlPrograms(claimScript []byte) (string, []byte) {
- federationRedeemScript := vmutil.CalculateContract(consensus.ActiveNetParams.FedpegXPubs, claimScript)
- scriptHash := crypto.Sha256(federationRedeemScript)
-
- address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams)
- if err != nil {
- return "", nil
- }
-
- redeemContract := address.ScriptAddress()
-
- program := []byte{}
- program, err = vmutil.P2WSHProgram(redeemContract)
- if err != nil {
- return "", nil
- }
-
- return address.EncodeAddress(), program
-}
-
-func (b *BytomPeginRpc) CreatePeginContractPrograms(accountID string, change bool) (string, []byte, error) {
- // 通过配置获取
- claimCtrlProg, err := b.Wallet.AccountMgr.CreateAddress(accountID, change)
- if err != nil {
- return "", nil, err
- }
- claimScript := claimCtrlProg.ControlProgram
-
- peginContractPrograms, err := pegin_contract.GetPeginContractPrograms(claimScript)
- if err != nil {
- return "", nil, err
- }
- return hex.EncodeToString(peginContractPrograms), claimScript, nil
-
-}
-
-func (b *BytomPeginRpc) CreatePeginContractAddress(accountID string, change bool) (string, []byte, []byte, error) {
- // 通过配置获取
- claimCtrlProg, err := b.Wallet.AccountMgr.CreateAddress(accountID, change)
- if err != nil {
- return "", nil, nil, err
- }
- claimScript := claimCtrlProg.ControlProgram
-
- peginContractPrograms, err := pegin_contract.GetPeginContractPrograms(claimScript)
- if err != nil {
- return "", nil, nil, err
- }
-
- scriptHash := crypto.Sha256(peginContractPrograms)
-
- address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams)
- if err != nil {
- return "", nil, nil, err
- }
-
- redeemContract := address.ScriptAddress()
-
- program := []byte{}
- program, err = vmutil.P2WSHProgram(redeemContract)
- if err != nil {
- return "", nil, nil, err
- }
-
- return address.EncodeAddress(), program, claimScript, nil
-
-}
-
-func (b *BytomPeginRpc) GetPeginContractControlPrograms(claimScript []byte) (string, []byte) {
-
- peginContractPrograms, err := pegin_contract.GetPeginContractPrograms(claimScript)
- if err != nil {
- return "", nil
- }
- scriptHash := crypto.Sha256(peginContractPrograms)
-
- address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams)
- if err != nil {
- return "", nil
- }
-
- redeemContract := address.ScriptAddress()
-
- program := []byte{}
- program, err = vmutil.P2WSHProgram(redeemContract)
- if err != nil {
- return "", nil
- }
-
- return address.EncodeAddress(), program
-}