多签转账(5-7签名)

7个钱包生成一个多签账号(命令行或者代码生成),至少需要5个人签名才能使用(7个人之中选择)
多签账号(A............S),10亿
-1- Ontology-go-sdk -> MultiSignToTransaction
-2- 10亿转到自己钱包
-3- 通过自己钱包进行一次转账(还是转到自己账户,智能合约会自动生成ong)
-4- 通过unboundong/withdrawong进行提取合约当中生成的ong(一万个ont给与4个ong,ong用于支付交易手续费)

package Mul

import (
    "fmt"
    "github.com/ontio/ontology-crypto/keypair"
    ont "github.com/ontio/ontology-go-sdk"
    "github.com/ontio/ontology/common"
    "github.com/ontio/ontology/core/types"
    ont2 "github.com/ontio/ontology/smartcontract/service/native/ont"
    "strconv"
    "time"
)

var (
    OntSdk *ont.OntologySdk
    Passwd   = []byte("1107")
    GasPrice = uint64(0)
    GasLimit = uint64(30000)
    //Addr1   *ont.Account
    addr1,_= common.AddressFromBase58("ATFBjDmoyvj7HcUMMJ7VfGiE8WupGypT2i")
    //addr2,_= common.AddressFromBase58("APCWAUjgRmu1eLEc651GacsvKzTTfEUVhd")
    //addr3,_= common.AddressFromBase58("AbPC4dEbLK9Py7jxrMwVaY3cfC2DGcsXuY")
    //addr4,_= common.AddressFromBase58("ASpmYbwXhu1s1zC6FYwmrAVnPp5ZmjpCmJ")
    //addr5,_= common.AddressFromBase58("AKDjhL8LU5sjd3jFQbNQSkXCz9f2cavSog")
    //addr6,_= common.AddressFromBase58("AL5GixTHMGdn4iS2FMsULYq3R5c7WZy617")
    //addr7,_= common.AddressFromBase58("AXExefyGAFrrZvJwZ85rwuixhFr5pkTmaa")
    Wallet []ont.Wallet
    Acc  *ont.Account
    MulKey  = make([]keypair.PublicKey,0)
    acc  = make([]*ont.Account,0)
    MulSigAddr  common.Address
)
func Getbanlance(){
    OntSdk = ont.NewOntologySdk()
    OntSdk.NewRpcClient().SetAddress("http://127.0.0.1:10339")
    balance1,_ := OntSdk.Native.Ont.BalanceOf(addr1)
    fmt.Print(balance1)
}

func GetTx() {
    for a := 1; a < 8; a++ {
        B := "/Users/onchain/Desktop/ontology-"
        A := "/wallet.dat"
        C := strconv.Itoa(a)
        Path := B +C+ A
        wallet, err := ont.OpenWallet(Path)
        if err != nil {
            fmt.Printf("account.Open error:%s\n", err)
            return
        }

        Acc, err = wallet.GetDefaultAccount(Passwd)
        if err != nil {
            fmt.Printf("GetDefaultAccount error:%s\n", err)
            return
        }

        MulKey = append(MulKey,Acc.PublicKey)
        acc = append(acc,Acc)
    }
    fmt.Print(MulKey)

    MulSigAddr, _ = types.AddressFromMultiPubKeys(MulKey, 5)
    fmt.Print(MulSigAddr)

    balance,_ := OntSdk.Native.Ont.BalanceOf(MulSigAddr)
    fmt.Print(balance)

    States := []*ont2.State {{MulSigAddr,addr1,1000000000}}
    tx, _ := OntSdk.Native.Ont.NewMultiTransferTransaction(GasPrice,GasLimit,States)

    for _, Acc = range acc {
        err := OntSdk.MultiSignToTransaction(tx,5, MulKey, Acc)
        fmt.Print(err)
    }
    data,err:= OntSdk.SendTransaction(tx)
    fmt.Print(data,err)
}


func GetBAS(){
    time.After(6)
    //balance1,_ := OntSdk.Native.Ont.BalanceOf(addr1)
    balance1,_ := OntSdk.Native.Ont.BalanceOf(addr1)
    fmt.Print(balance1)
}

猜你喜欢

转载自blog.csdn.net/weixin_34240657/article/details/87045676