Commit 47379749 authored by caopingcp's avatar caopingcp Committed by vipwzw

update vrf usage

parent be6fe665
......@@ -6,6 +6,7 @@ package ticket
import (
"bytes"
"crypto/ecdsa"
"encoding/hex"
"errors"
"fmt"
......@@ -20,13 +21,14 @@ import (
"github.com/33cn/chain33/common/crypto"
"github.com/33cn/chain33/common/difficulty"
"github.com/33cn/chain33/common/log/log15"
vrf "github.com/33cn/chain33/common/vrf/p256"
vrf "github.com/33cn/chain33/common/vrf/secp256k1"
"github.com/33cn/chain33/queue"
drivers "github.com/33cn/chain33/system/consensus"
driver "github.com/33cn/chain33/system/dapp"
cty "github.com/33cn/chain33/system/dapp/coins/types"
"github.com/33cn/chain33/types"
ty "github.com/33cn/plugin/plugin/dapp/ticket/types"
secp256k1 "github.com/btcsuite/btcd/btcec"
"github.com/golang/protobuf/proto"
)
......@@ -377,11 +379,12 @@ func (client *Client) CheckBlock(parent *types.Block, current *types.BlockDetail
if input == nil {
input = miner.PrivHash
}
if err = vrfVerify(miner.PubKey, input, miner.VrfProof, miner.VrfHash); err != nil {
minerTx := current.Block.Txs[0]
if err = vrfVerify(minerTx.Signature.Pubkey, input, miner.VrfProof, miner.VrfHash); err != nil {
return err
}
} else {
if len(miner.PubKey) != 0 || len(miner.VrfHash) != 0 || len(miner.VrfProof) != 0 {
if len(miner.VrfHash) != 0 || len(miner.VrfProof) != 0 {
tlog.Error("block error: not yet add vrf")
return ty.ErrNoVrf
}
......@@ -390,11 +393,12 @@ func (client *Client) CheckBlock(parent *types.Block, current *types.BlockDetail
}
func vrfVerify(pub []byte, input []byte, proof []byte, hash []byte) error {
vrfPub, err := vrf.ParseVrfPubKey(pub)
pubKey, err := secp256k1.ParsePubKey(pub, secp256k1.S256())
if err != nil {
tlog.Error("vrfVerify", "err", err)
return ty.ErrVrfVerify
}
vrfPub := &vrf.PublicKey{PublicKey: (*ecdsa.PublicKey)(pubKey)}
vrfHash, err := vrfPub.ProofToHash(input, proof)
if err != nil {
tlog.Error("vrfVerify", "err", err)
......@@ -653,9 +657,9 @@ func (client *Client) addMinerTx(parent, block *types.Block, diff *big.Int, priv
if input == nil {
input = miner.PrivHash
}
vrfPriv, _, pubKey := vrf.GenVrfKey(priv)
privKey, _ := secp256k1.PrivKeyFromBytes(secp256k1.S256(), priv.Bytes())
vrfPriv := &vrf.PrivateKey{PrivateKey: (*ecdsa.PrivateKey)(privKey)}
vrfHash, vrfProof := vrfPriv.Evaluate(input)
miner.PubKey = pubKey
miner.VrfHash = vrfHash[:]
miner.VrfProof = vrfProof
}
......
......@@ -5,17 +5,19 @@
package ticket
import (
"crypto/ecdsa"
"fmt"
"testing"
"github.com/33cn/chain33/account"
"github.com/33cn/chain33/common/crypto"
vrf "github.com/33cn/chain33/common/vrf/p256"
vrf "github.com/33cn/chain33/common/vrf/secp256k1"
"github.com/33cn/chain33/queue"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/util"
"github.com/33cn/chain33/util/testnode"
ty "github.com/33cn/plugin/plugin/dapp/ticket/types"
secp256k1 "github.com/btcsuite/btcd/btcec"
"github.com/stretchr/testify/assert"
_ "github.com/33cn/chain33/system"
......@@ -170,8 +172,11 @@ func Test_vrfVerify(t *testing.T) {
assert.NoError(t, err)
priv, err := c.GenKey()
assert.NoError(t, err)
pub := priv.PubKey().Bytes()
privKey, _ := secp256k1.PrivKeyFromBytes(secp256k1.S256(), priv.Bytes())
vpriv := &vrf.PrivateKey{PrivateKey: (*ecdsa.PrivateKey)(privKey)}
vpriv, _, pubKey := vrf.GenVrfKey(priv)
m1 := []byte("data1")
m2 := []byte("data2")
m3 := []byte("data2")
......@@ -191,7 +196,7 @@ func Test_vrfVerify(t *testing.T) {
{m3, hash3, proof1, ty.ErrVrfVerify},
{m3, hash1, proof3, ty.ErrVrfVerify},
} {
err := vrfVerify(pubKey, tc.m, tc.proof, tc.hash[:])
err := vrfVerify(pub, tc.m, tc.proof, tc.hash[:])
if got, want := err, tc.err; got != want {
t.Errorf("vrfVerify(%s, %x): %v, want %v", tc.m, tc.proof, got, want)
}
......
......@@ -45,7 +45,6 @@ func (ticket *Ticket) GetRandNum(blockHash []byte, blockNum int64) (types.Messag
var ticketIds string
var privHashs []byte
var vrfHashs []byte
var vrfProofs []byte
for _, ticketAction := range txActions {
//tlog.Debug("GetRandNum", "modify", ticketAction.GetMiner().GetModify(), "bits", ticketAction.GetMiner().GetBits(), "ticketId", ticketAction.GetMiner().GetTicketId(), "PrivHash", ticketAction.GetMiner().GetPrivHash())
......@@ -54,12 +53,11 @@ func (ticket *Ticket) GetRandNum(blockHash []byte, blockNum int64) (types.Messag
ticketIds += ticketAction.GetMiner().GetTicketId()
privHashs = append(privHashs, ticketAction.GetMiner().GetPrivHash()...)
vrfHashs = append(vrfHashs, ticketAction.GetMiner().GetVrfHash()...)
vrfProofs = append(vrfProofs, ticketAction.GetMiner().GetVrfProof()...)
}
newmodify := fmt.Sprintf("%s:%s:%d:%s", string(modifies), ticketIds, bits, string(privHashs))
if len(vrfHashs) != 0 {
newmodify = newmodify + ":" + fmt.Sprintf("%x:%x", vrfHashs, vrfProofs)
newmodify = fmt.Sprintf("%s:%x", newmodify, vrfHashs)
}
modify := common.Sha256([]byte(newmodify))
......
......@@ -41,12 +41,10 @@ message TicketMiner {
bytes modify = 4;
//挖到区块时公开
bytes privHash = 5;
//VRF公钥
bytes pubKey = 6;
//VRF计算得到的hash
bytes vrfHash = 7;
bytes vrfHash = 6;
//VRF计算得到的proof
bytes vrfProof = 8;
bytes vrfProof = 7;
}
message TicketMinerOld {
......
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: ticket.proto
/*
Package types is a generated protocol buffer package.
It is generated from these files:
ticket.proto
It has these top-level messages:
Ticket
TicketAction
TicketMiner
TicketMinerOld
MinerFlag
TicketBind
TicketOpen
TicketGenesis
TicketClose
TicketList
TicketInfos
ReplyTicketList
ReplyWalletTickets
ReceiptTicket
ReceiptTicketBind
ReqBindMiner
ReplyBindMiner
*/
package types
import (
context "context"
fmt "fmt"
math "math"
import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import types1 "github.com/33cn/chain33/types"
types "github.com/33cn/chain33/types"
proto "github.com/golang/protobuf/proto"
import (
context "golang.org/x/net/context"
grpc "google.golang.org/grpc"
)
......@@ -25,51 +50,28 @@ var _ = math.Inf
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type Ticket struct {
TicketId string `protobuf:"bytes,1,opt,name=ticketId,proto3" json:"ticketId,omitempty"`
TicketId string `protobuf:"bytes,1,opt,name=ticketId" json:"ticketId,omitempty"`
// 0 -> 未成熟 1 -> 可挖矿 2 -> 已挖成功 3-> 已关闭
Status int32 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
Status int32 `protobuf:"varint,2,opt,name=status" json:"status,omitempty"`
// genesis 创建的私钥比较特殊
IsGenesis bool `protobuf:"varint,3,opt,name=isGenesis,proto3" json:"isGenesis,omitempty"`
//创建时间
CreateTime int64 `protobuf:"varint,4,opt,name=createTime,proto3" json:"createTime,omitempty"`
//挖矿时间
MinerTime int64 `protobuf:"varint,5,opt,name=minerTime,proto3" json:"minerTime,omitempty"`
//挖到的币的数目
MinerValue int64 `protobuf:"varint,8,opt,name=minerValue,proto3" json:"minerValue,omitempty"`
MinerAddress string `protobuf:"bytes,6,opt,name=minerAddress,proto3" json:"minerAddress,omitempty"`
IsGenesis bool `protobuf:"varint,3,opt,name=isGenesis" json:"isGenesis,omitempty"`
// 创建时间
CreateTime int64 `protobuf:"varint,4,opt,name=createTime" json:"createTime,omitempty"`
// 挖矿时间
MinerTime int64 `protobuf:"varint,5,opt,name=minerTime" json:"minerTime,omitempty"`
// 挖到的币的数目
MinerValue int64 `protobuf:"varint,8,opt,name=minerValue" json:"minerValue,omitempty"`
MinerAddress string `protobuf:"bytes,6,opt,name=minerAddress" json:"minerAddress,omitempty"`
// return wallet
ReturnAddress string `protobuf:"bytes,7,opt,name=returnAddress,proto3" json:"returnAddress,omitempty"`
//miner Price
Price int64 `protobuf:"varint,9,opt,name=price,proto3" json:"price,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Ticket) Reset() { *m = Ticket{} }
func (m *Ticket) String() string { return proto.CompactTextString(m) }
func (*Ticket) ProtoMessage() {}
func (*Ticket) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{0}
}
func (m *Ticket) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Ticket.Unmarshal(m, b)
}
func (m *Ticket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Ticket.Marshal(b, m, deterministic)
}
func (m *Ticket) XXX_Merge(src proto.Message) {
xxx_messageInfo_Ticket.Merge(m, src)
}
func (m *Ticket) XXX_Size() int {
return xxx_messageInfo_Ticket.Size(m)
}
func (m *Ticket) XXX_DiscardUnknown() {
xxx_messageInfo_Ticket.DiscardUnknown(m)
ReturnAddress string `protobuf:"bytes,7,opt,name=returnAddress" json:"returnAddress,omitempty"`
// miner Price
Price int64 `protobuf:"varint,9,opt,name=price" json:"price,omitempty"`
}
var xxx_messageInfo_Ticket proto.InternalMessageInfo
func (m *Ticket) Reset() { *m = Ticket{} }
func (m *Ticket) String() string { return proto.CompactTextString(m) }
func (*Ticket) ProtoMessage() {}
func (*Ticket) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
func (m *Ticket) GetTicketId() string {
if m != nil {
......@@ -142,71 +144,40 @@ type TicketAction struct {
// *TicketAction_Genesis
// *TicketAction_Tclose
// *TicketAction_Miner
Value isTicketAction_Value `protobuf_oneof:"value"`
Ty int32 `protobuf:"varint,10,opt,name=ty,proto3" json:"ty,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Value isTicketAction_Value `protobuf_oneof:"value"`
Ty int32 `protobuf:"varint,10,opt,name=ty" json:"ty,omitempty"`
}
func (m *TicketAction) Reset() { *m = TicketAction{} }
func (m *TicketAction) String() string { return proto.CompactTextString(m) }
func (*TicketAction) ProtoMessage() {}
func (*TicketAction) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{1}
}
func (m *TicketAction) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TicketAction.Unmarshal(m, b)
}
func (m *TicketAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TicketAction.Marshal(b, m, deterministic)
}
func (m *TicketAction) XXX_Merge(src proto.Message) {
xxx_messageInfo_TicketAction.Merge(m, src)
}
func (m *TicketAction) XXX_Size() int {
return xxx_messageInfo_TicketAction.Size(m)
}
func (m *TicketAction) XXX_DiscardUnknown() {
xxx_messageInfo_TicketAction.DiscardUnknown(m)
}
var xxx_messageInfo_TicketAction proto.InternalMessageInfo
func (m *TicketAction) Reset() { *m = TicketAction{} }
func (m *TicketAction) String() string { return proto.CompactTextString(m) }
func (*TicketAction) ProtoMessage() {}
func (*TicketAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
type isTicketAction_Value interface {
isTicketAction_Value()
}
type TicketAction_Tbind struct {
Tbind *TicketBind `protobuf:"bytes,5,opt,name=tbind,proto3,oneof"`
Tbind *TicketBind `protobuf:"bytes,5,opt,name=tbind,oneof"`
}
type TicketAction_Topen struct {
Topen *TicketOpen `protobuf:"bytes,1,opt,name=topen,proto3,oneof"`
Topen *TicketOpen `protobuf:"bytes,1,opt,name=topen,oneof"`
}
type TicketAction_Genesis struct {
Genesis *TicketGenesis `protobuf:"bytes,2,opt,name=genesis,proto3,oneof"`
Genesis *TicketGenesis `protobuf:"bytes,2,opt,name=genesis,oneof"`
}
type TicketAction_Tclose struct {
Tclose *TicketClose `protobuf:"bytes,3,opt,name=tclose,proto3,oneof"`
Tclose *TicketClose `protobuf:"bytes,3,opt,name=tclose,oneof"`
}
type TicketAction_Miner struct {
Miner *TicketMiner `protobuf:"bytes,4,opt,name=miner,proto3,oneof"`
Miner *TicketMiner `protobuf:"bytes,4,opt,name=miner,oneof"`
}
func (*TicketAction_Tbind) isTicketAction_Value() {}
func (*TicketAction_Topen) isTicketAction_Value() {}
func (*TicketAction_Tbind) isTicketAction_Value() {}
func (*TicketAction_Topen) isTicketAction_Value() {}
func (*TicketAction_Genesis) isTicketAction_Value() {}
func (*TicketAction_Tclose) isTicketAction_Value() {}
func (*TicketAction_Miner) isTicketAction_Value() {}
func (*TicketAction_Tclose) isTicketAction_Value() {}
func (*TicketAction_Miner) isTicketAction_Value() {}
func (m *TicketAction) GetValue() isTicketAction_Value {
if m != nil {
......@@ -358,27 +329,27 @@ func _TicketAction_OneofSizer(msg proto.Message) (n int) {
switch x := m.Value.(type) {
case *TicketAction_Tbind:
s := proto.Size(x.Tbind)
n += 1 // tag and wire
n += proto.SizeVarint(5<<3 | proto.WireBytes)
n += proto.SizeVarint(uint64(s))
n += s
case *TicketAction_Topen:
s := proto.Size(x.Topen)
n += 1 // tag and wire
n += proto.SizeVarint(1<<3 | proto.WireBytes)
n += proto.SizeVarint(uint64(s))
n += s
case *TicketAction_Genesis:
s := proto.Size(x.Genesis)
n += 1 // tag and wire
n += proto.SizeVarint(2<<3 | proto.WireBytes)
n += proto.SizeVarint(uint64(s))
n += s
case *TicketAction_Tclose:
s := proto.Size(x.Tclose)
n += 1 // tag and wire
n += proto.SizeVarint(3<<3 | proto.WireBytes)
n += proto.SizeVarint(uint64(s))
n += s
case *TicketAction_Miner:
s := proto.Size(x.Miner)
n += 1 // tag and wire
n += proto.SizeVarint(4<<3 | proto.WireBytes)
n += proto.SizeVarint(uint64(s))
n += s
case nil:
......@@ -389,47 +360,22 @@ func _TicketAction_OneofSizer(msg proto.Message) (n int) {
}
type TicketMiner struct {
Bits uint32 `protobuf:"varint,1,opt,name=bits,proto3" json:"bits,omitempty"`
Reward int64 `protobuf:"varint,2,opt,name=reward,proto3" json:"reward,omitempty"`
TicketId string `protobuf:"bytes,3,opt,name=ticketId,proto3" json:"ticketId,omitempty"`
Bits uint32 `protobuf:"varint,1,opt,name=bits" json:"bits,omitempty"`
Reward int64 `protobuf:"varint,2,opt,name=reward" json:"reward,omitempty"`
TicketId string `protobuf:"bytes,3,opt,name=ticketId" json:"ticketId,omitempty"`
Modify []byte `protobuf:"bytes,4,opt,name=modify,proto3" json:"modify,omitempty"`
//挖到区块时公开
// 挖到区块时公开
PrivHash []byte `protobuf:"bytes,5,opt,name=privHash,proto3" json:"privHash,omitempty"`
//VRF公钥
PubKey []byte `protobuf:"bytes,6,opt,name=pubKey,proto3" json:"pubKey,omitempty"`
//VRF计算得到的hash
VrfHash []byte `protobuf:"bytes,7,opt,name=vrfHash,proto3" json:"vrfHash,omitempty"`
//VRF计算得到的proof
VrfProof []byte `protobuf:"bytes,8,opt,name=vrfProof,proto3" json:"vrfProof,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TicketMiner) Reset() { *m = TicketMiner{} }
func (m *TicketMiner) String() string { return proto.CompactTextString(m) }
func (*TicketMiner) ProtoMessage() {}
func (*TicketMiner) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{2}
}
func (m *TicketMiner) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TicketMiner.Unmarshal(m, b)
}
func (m *TicketMiner) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TicketMiner.Marshal(b, m, deterministic)
}
func (m *TicketMiner) XXX_Merge(src proto.Message) {
xxx_messageInfo_TicketMiner.Merge(m, src)
}
func (m *TicketMiner) XXX_Size() int {
return xxx_messageInfo_TicketMiner.Size(m)
}
func (m *TicketMiner) XXX_DiscardUnknown() {
xxx_messageInfo_TicketMiner.DiscardUnknown(m)
// VRF计算得到的hash
VrfHash []byte `protobuf:"bytes,6,opt,name=vrfHash,proto3" json:"vrfHash,omitempty"`
// VRF计算得到的proof
VrfProof []byte `protobuf:"bytes,7,opt,name=vrfProof,proto3" json:"vrfProof,omitempty"`
}
var xxx_messageInfo_TicketMiner proto.InternalMessageInfo
func (m *TicketMiner) Reset() { *m = TicketMiner{} }
func (m *TicketMiner) String() string { return proto.CompactTextString(m) }
func (*TicketMiner) ProtoMessage() {}
func (*TicketMiner) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
func (m *TicketMiner) GetBits() uint32 {
if m != nil {
......@@ -466,13 +412,6 @@ func (m *TicketMiner) GetPrivHash() []byte {
return nil
}
func (m *TicketMiner) GetPubKey() []byte {
if m != nil {
return m.PubKey
}
return nil
}
func (m *TicketMiner) GetVrfHash() []byte {
if m != nil {
return m.VrfHash
......@@ -488,39 +427,16 @@ func (m *TicketMiner) GetVrfProof() []byte {
}
type TicketMinerOld struct {
Bits uint32 `protobuf:"varint,1,opt,name=bits,proto3" json:"bits,omitempty"`
Reward int64 `protobuf:"varint,2,opt,name=reward,proto3" json:"reward,omitempty"`
TicketId string `protobuf:"bytes,3,opt,name=ticketId,proto3" json:"ticketId,omitempty"`
Modify []byte `protobuf:"bytes,4,opt,name=modify,proto3" json:"modify,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TicketMinerOld) Reset() { *m = TicketMinerOld{} }
func (m *TicketMinerOld) String() string { return proto.CompactTextString(m) }
func (*TicketMinerOld) ProtoMessage() {}
func (*TicketMinerOld) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{3}
}
func (m *TicketMinerOld) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TicketMinerOld.Unmarshal(m, b)
}
func (m *TicketMinerOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TicketMinerOld.Marshal(b, m, deterministic)
}
func (m *TicketMinerOld) XXX_Merge(src proto.Message) {
xxx_messageInfo_TicketMinerOld.Merge(m, src)
}
func (m *TicketMinerOld) XXX_Size() int {
return xxx_messageInfo_TicketMinerOld.Size(m)
}
func (m *TicketMinerOld) XXX_DiscardUnknown() {
xxx_messageInfo_TicketMinerOld.DiscardUnknown(m)
Bits uint32 `protobuf:"varint,1,opt,name=bits" json:"bits,omitempty"`
Reward int64 `protobuf:"varint,2,opt,name=reward" json:"reward,omitempty"`
TicketId string `protobuf:"bytes,3,opt,name=ticketId" json:"ticketId,omitempty"`
Modify []byte `protobuf:"bytes,4,opt,name=modify,proto3" json:"modify,omitempty"`
}
var xxx_messageInfo_TicketMinerOld proto.InternalMessageInfo
func (m *TicketMinerOld) Reset() { *m = TicketMinerOld{} }
func (m *TicketMinerOld) String() string { return proto.CompactTextString(m) }
func (*TicketMinerOld) ProtoMessage() {}
func (*TicketMinerOld) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
func (m *TicketMinerOld) GetBits() uint32 {
if m != nil {
......@@ -551,37 +467,14 @@ func (m *TicketMinerOld) GetModify() []byte {
}
type MinerFlag struct {
Flag int32 `protobuf:"varint,1,opt,name=flag,proto3" json:"flag,omitempty"`
Reserve int64 `protobuf:"varint,2,opt,name=reserve,proto3" json:"reserve,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *MinerFlag) Reset() { *m = MinerFlag{} }
func (m *MinerFlag) String() string { return proto.CompactTextString(m) }
func (*MinerFlag) ProtoMessage() {}
func (*MinerFlag) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{4}
Flag int32 `protobuf:"varint,1,opt,name=flag" json:"flag,omitempty"`
Reserve int64 `protobuf:"varint,2,opt,name=reserve" json:"reserve,omitempty"`
}
func (m *MinerFlag) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MinerFlag.Unmarshal(m, b)
}
func (m *MinerFlag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_MinerFlag.Marshal(b, m, deterministic)
}
func (m *MinerFlag) XXX_Merge(src proto.Message) {
xxx_messageInfo_MinerFlag.Merge(m, src)
}
func (m *MinerFlag) XXX_Size() int {
return xxx_messageInfo_MinerFlag.Size(m)
}
func (m *MinerFlag) XXX_DiscardUnknown() {
xxx_messageInfo_MinerFlag.DiscardUnknown(m)
}
var xxx_messageInfo_MinerFlag proto.InternalMessageInfo
func (m *MinerFlag) Reset() { *m = MinerFlag{} }
func (m *MinerFlag) String() string { return proto.CompactTextString(m) }
func (*MinerFlag) ProtoMessage() {}
func (*MinerFlag) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
func (m *MinerFlag) GetFlag() int32 {
if m != nil {
......@@ -598,37 +491,14 @@ func (m *MinerFlag) GetReserve() int64 {
}
type TicketBind struct {
MinerAddress string `protobuf:"bytes,1,opt,name=minerAddress,proto3" json:"minerAddress,omitempty"`
ReturnAddress string `protobuf:"bytes,2,opt,name=returnAddress,proto3" json:"returnAddress,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TicketBind) Reset() { *m = TicketBind{} }
func (m *TicketBind) String() string { return proto.CompactTextString(m) }
func (*TicketBind) ProtoMessage() {}
func (*TicketBind) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{5}
}
func (m *TicketBind) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TicketBind.Unmarshal(m, b)
}
func (m *TicketBind) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TicketBind.Marshal(b, m, deterministic)
}
func (m *TicketBind) XXX_Merge(src proto.Message) {
xxx_messageInfo_TicketBind.Merge(m, src)
}
func (m *TicketBind) XXX_Size() int {
return xxx_messageInfo_TicketBind.Size(m)
}
func (m *TicketBind) XXX_DiscardUnknown() {
xxx_messageInfo_TicketBind.DiscardUnknown(m)
MinerAddress string `protobuf:"bytes,1,opt,name=minerAddress" json:"minerAddress,omitempty"`
ReturnAddress string `protobuf:"bytes,2,opt,name=returnAddress" json:"returnAddress,omitempty"`
}
var xxx_messageInfo_TicketBind proto.InternalMessageInfo
func (m *TicketBind) Reset() { *m = TicketBind{} }
func (m *TicketBind) String() string { return proto.CompactTextString(m) }
func (*TicketBind) ProtoMessage() {}
func (*TicketBind) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
func (m *TicketBind) GetMinerAddress() string {
if m != nil {
......@@ -645,45 +515,22 @@ func (m *TicketBind) GetReturnAddress() string {
}
type TicketOpen struct {
//用户挖矿的ticket 地址
MinerAddress string `protobuf:"bytes,1,opt,name=minerAddress,proto3" json:"minerAddress,omitempty"`
//购买ticket的数目
Count int32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`
//币实际存储的地址
ReturnAddress string `protobuf:"bytes,3,opt,name=returnAddress,proto3" json:"returnAddress,omitempty"`
//随机种子
RandSeed int64 `protobuf:"varint,4,opt,name=randSeed,proto3" json:"randSeed,omitempty"`
//购买ticket时公开
PubHashes [][]byte `protobuf:"bytes,5,rep,name=pubHashes,proto3" json:"pubHashes,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TicketOpen) Reset() { *m = TicketOpen{} }
func (m *TicketOpen) String() string { return proto.CompactTextString(m) }
func (*TicketOpen) ProtoMessage() {}
func (*TicketOpen) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{6}
}
func (m *TicketOpen) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TicketOpen.Unmarshal(m, b)
}
func (m *TicketOpen) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TicketOpen.Marshal(b, m, deterministic)
}
func (m *TicketOpen) XXX_Merge(src proto.Message) {
xxx_messageInfo_TicketOpen.Merge(m, src)
}
func (m *TicketOpen) XXX_Size() int {
return xxx_messageInfo_TicketOpen.Size(m)
}
func (m *TicketOpen) XXX_DiscardUnknown() {
xxx_messageInfo_TicketOpen.DiscardUnknown(m)
}
var xxx_messageInfo_TicketOpen proto.InternalMessageInfo
// 用户挖矿的ticket 地址
MinerAddress string `protobuf:"bytes,1,opt,name=minerAddress" json:"minerAddress,omitempty"`
// 购买ticket的数目
Count int32 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
// 币实际存储的地址
ReturnAddress string `protobuf:"bytes,3,opt,name=returnAddress" json:"returnAddress,omitempty"`
// 随机种子
RandSeed int64 `protobuf:"varint,4,opt,name=randSeed" json:"randSeed,omitempty"`
// 购买ticket时公开
PubHashes [][]byte `protobuf:"bytes,5,rep,name=pubHashes,proto3" json:"pubHashes,omitempty"`
}
func (m *TicketOpen) Reset() { *m = TicketOpen{} }
func (m *TicketOpen) String() string { return proto.CompactTextString(m) }
func (*TicketOpen) ProtoMessage() {}
func (*TicketOpen) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
func (m *TicketOpen) GetMinerAddress() string {
if m != nil {
......@@ -721,38 +568,15 @@ func (m *TicketOpen) GetPubHashes() [][]byte {
}
type TicketGenesis struct {
MinerAddress string `protobuf:"bytes,1,opt,name=minerAddress,proto3" json:"minerAddress,omitempty"`
ReturnAddress string `protobuf:"bytes,2,opt,name=returnAddress,proto3" json:"returnAddress,omitempty"`
Count int32 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TicketGenesis) Reset() { *m = TicketGenesis{} }
func (m *TicketGenesis) String() string { return proto.CompactTextString(m) }
func (*TicketGenesis) ProtoMessage() {}
func (*TicketGenesis) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{7}
}
func (m *TicketGenesis) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TicketGenesis.Unmarshal(m, b)
}
func (m *TicketGenesis) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TicketGenesis.Marshal(b, m, deterministic)
}
func (m *TicketGenesis) XXX_Merge(src proto.Message) {
xxx_messageInfo_TicketGenesis.Merge(m, src)
}
func (m *TicketGenesis) XXX_Size() int {
return xxx_messageInfo_TicketGenesis.Size(m)
}
func (m *TicketGenesis) XXX_DiscardUnknown() {
xxx_messageInfo_TicketGenesis.DiscardUnknown(m)
MinerAddress string `protobuf:"bytes,1,opt,name=minerAddress" json:"minerAddress,omitempty"`
ReturnAddress string `protobuf:"bytes,2,opt,name=returnAddress" json:"returnAddress,omitempty"`
Count int32 `protobuf:"varint,3,opt,name=count" json:"count,omitempty"`
}
var xxx_messageInfo_TicketGenesis proto.InternalMessageInfo
func (m *TicketGenesis) Reset() { *m = TicketGenesis{} }
func (m *TicketGenesis) String() string { return proto.CompactTextString(m) }
func (*TicketGenesis) ProtoMessage() {}
func (*TicketGenesis) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
func (m *TicketGenesis) GetMinerAddress() string {
if m != nil {
......@@ -776,37 +600,14 @@ func (m *TicketGenesis) GetCount() int32 {
}
type TicketClose struct {
TicketId []string `protobuf:"bytes,1,rep,name=ticketId,proto3" json:"ticketId,omitempty"`
MinerAddress string `protobuf:"bytes,2,opt,name=minerAddress,proto3" json:"minerAddress,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TicketClose) Reset() { *m = TicketClose{} }
func (m *TicketClose) String() string { return proto.CompactTextString(m) }
func (*TicketClose) ProtoMessage() {}
func (*TicketClose) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{8}
}
func (m *TicketClose) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TicketClose.Unmarshal(m, b)
}
func (m *TicketClose) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TicketClose.Marshal(b, m, deterministic)
}
func (m *TicketClose) XXX_Merge(src proto.Message) {
xxx_messageInfo_TicketClose.Merge(m, src)
}
func (m *TicketClose) XXX_Size() int {
return xxx_messageInfo_TicketClose.Size(m)
}
func (m *TicketClose) XXX_DiscardUnknown() {
xxx_messageInfo_TicketClose.DiscardUnknown(m)
TicketId []string `protobuf:"bytes,1,rep,name=ticketId" json:"ticketId,omitempty"`
MinerAddress string `protobuf:"bytes,2,opt,name=minerAddress" json:"minerAddress,omitempty"`
}
var xxx_messageInfo_TicketClose proto.InternalMessageInfo
func (m *TicketClose) Reset() { *m = TicketClose{} }
func (m *TicketClose) String() string { return proto.CompactTextString(m) }
func (*TicketClose) ProtoMessage() {}
func (*TicketClose) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
func (m *TicketClose) GetTicketId() []string {
if m != nil {
......@@ -823,37 +624,14 @@ func (m *TicketClose) GetMinerAddress() string {
}
type TicketList struct {
Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
Status int32 `protobuf:"varint,3,opt,name=status,proto3" json:"status,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Addr string `protobuf:"bytes,1,opt,name=addr" json:"addr,omitempty"`
Status int32 `protobuf:"varint,3,opt,name=status" json:"status,omitempty"`
}
func (m *TicketList) Reset() { *m = TicketList{} }
func (m *TicketList) String() string { return proto.CompactTextString(m) }
func (*TicketList) ProtoMessage() {}
func (*TicketList) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{9}
}
func (m *TicketList) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TicketList.Unmarshal(m, b)
}
func (m *TicketList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TicketList.Marshal(b, m, deterministic)
}
func (m *TicketList) XXX_Merge(src proto.Message) {
xxx_messageInfo_TicketList.Merge(m, src)
}
func (m *TicketList) XXX_Size() int {
return xxx_messageInfo_TicketList.Size(m)
}
func (m *TicketList) XXX_DiscardUnknown() {
xxx_messageInfo_TicketList.DiscardUnknown(m)
}
var xxx_messageInfo_TicketList proto.InternalMessageInfo
func (m *TicketList) Reset() { *m = TicketList{} }
func (m *TicketList) String() string { return proto.CompactTextString(m) }
func (*TicketList) ProtoMessage() {}
func (*TicketList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
func (m *TicketList) GetAddr() string {
if m != nil {
......@@ -870,36 +648,13 @@ func (m *TicketList) GetStatus() int32 {
}
type TicketInfos struct {
TicketIds []string `protobuf:"bytes,1,rep,name=ticketIds,proto3" json:"ticketIds,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TicketInfos) Reset() { *m = TicketInfos{} }
func (m *TicketInfos) String() string { return proto.CompactTextString(m) }
func (*TicketInfos) ProtoMessage() {}
func (*TicketInfos) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{10}
TicketIds []string `protobuf:"bytes,1,rep,name=ticketIds" json:"ticketIds,omitempty"`
}
func (m *TicketInfos) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TicketInfos.Unmarshal(m, b)
}
func (m *TicketInfos) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TicketInfos.Marshal(b, m, deterministic)
}
func (m *TicketInfos) XXX_Merge(src proto.Message) {
xxx_messageInfo_TicketInfos.Merge(m, src)
}
func (m *TicketInfos) XXX_Size() int {
return xxx_messageInfo_TicketInfos.Size(m)
}
func (m *TicketInfos) XXX_DiscardUnknown() {
xxx_messageInfo_TicketInfos.DiscardUnknown(m)
}
var xxx_messageInfo_TicketInfos proto.InternalMessageInfo
func (m *TicketInfos) Reset() { *m = TicketInfos{} }
func (m *TicketInfos) String() string { return proto.CompactTextString(m) }
func (*TicketInfos) ProtoMessage() {}
func (*TicketInfos) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
func (m *TicketInfos) GetTicketIds() []string {
if m != nil {
......@@ -909,36 +664,13 @@ func (m *TicketInfos) GetTicketIds() []string {
}
type ReplyTicketList struct {
Tickets []*Ticket `protobuf:"bytes,1,rep,name=tickets,proto3" json:"tickets,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ReplyTicketList) Reset() { *m = ReplyTicketList{} }
func (m *ReplyTicketList) String() string { return proto.CompactTextString(m) }
func (*ReplyTicketList) ProtoMessage() {}
func (*ReplyTicketList) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{11}
}
func (m *ReplyTicketList) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReplyTicketList.Unmarshal(m, b)
}
func (m *ReplyTicketList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReplyTicketList.Marshal(b, m, deterministic)
}
func (m *ReplyTicketList) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReplyTicketList.Merge(m, src)
}
func (m *ReplyTicketList) XXX_Size() int {
return xxx_messageInfo_ReplyTicketList.Size(m)
}
func (m *ReplyTicketList) XXX_DiscardUnknown() {
xxx_messageInfo_ReplyTicketList.DiscardUnknown(m)
Tickets []*Ticket `protobuf:"bytes,1,rep,name=tickets" json:"tickets,omitempty"`
}
var xxx_messageInfo_ReplyTicketList proto.InternalMessageInfo
func (m *ReplyTicketList) Reset() { *m = ReplyTicketList{} }
func (m *ReplyTicketList) String() string { return proto.CompactTextString(m) }
func (*ReplyTicketList) ProtoMessage() {}
func (*ReplyTicketList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
func (m *ReplyTicketList) GetTickets() []*Ticket {
if m != nil {
......@@ -948,37 +680,14 @@ func (m *ReplyTicketList) GetTickets() []*Ticket {
}
type ReplyWalletTickets struct {
Tickets []*Ticket `protobuf:"bytes,1,rep,name=tickets,proto3" json:"tickets,omitempty"`
Privkeys [][]byte `protobuf:"bytes,2,rep,name=privkeys,proto3" json:"privkeys,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ReplyWalletTickets) Reset() { *m = ReplyWalletTickets{} }
func (m *ReplyWalletTickets) String() string { return proto.CompactTextString(m) }
func (*ReplyWalletTickets) ProtoMessage() {}
func (*ReplyWalletTickets) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{12}
}
func (m *ReplyWalletTickets) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReplyWalletTickets.Unmarshal(m, b)
}
func (m *ReplyWalletTickets) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReplyWalletTickets.Marshal(b, m, deterministic)
}
func (m *ReplyWalletTickets) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReplyWalletTickets.Merge(m, src)
}
func (m *ReplyWalletTickets) XXX_Size() int {
return xxx_messageInfo_ReplyWalletTickets.Size(m)
}
func (m *ReplyWalletTickets) XXX_DiscardUnknown() {
xxx_messageInfo_ReplyWalletTickets.DiscardUnknown(m)
Tickets []*Ticket `protobuf:"bytes,1,rep,name=tickets" json:"tickets,omitempty"`
Privkeys [][]byte `protobuf:"bytes,2,rep,name=privkeys,proto3" json:"privkeys,omitempty"`
}
var xxx_messageInfo_ReplyWalletTickets proto.InternalMessageInfo
func (m *ReplyWalletTickets) Reset() { *m = ReplyWalletTickets{} }
func (m *ReplyWalletTickets) String() string { return proto.CompactTextString(m) }
func (*ReplyWalletTickets) ProtoMessage() {}
func (*ReplyWalletTickets) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
func (m *ReplyWalletTickets) GetTickets() []*Ticket {
if m != nil {
......@@ -995,39 +704,16 @@ func (m *ReplyWalletTickets) GetPrivkeys() [][]byte {
}
type ReceiptTicket struct {
TicketId string `protobuf:"bytes,1,opt,name=ticketId,proto3" json:"ticketId,omitempty"`
Status int32 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
PrevStatus int32 `protobuf:"varint,3,opt,name=prevStatus,proto3" json:"prevStatus,omitempty"`
Addr string `protobuf:"bytes,4,opt,name=addr,proto3" json:"addr,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ReceiptTicket) Reset() { *m = ReceiptTicket{} }
func (m *ReceiptTicket) String() string { return proto.CompactTextString(m) }
func (*ReceiptTicket) ProtoMessage() {}
func (*ReceiptTicket) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{13}
}
func (m *ReceiptTicket) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReceiptTicket.Unmarshal(m, b)
}
func (m *ReceiptTicket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReceiptTicket.Marshal(b, m, deterministic)
}
func (m *ReceiptTicket) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReceiptTicket.Merge(m, src)
}
func (m *ReceiptTicket) XXX_Size() int {
return xxx_messageInfo_ReceiptTicket.Size(m)
}
func (m *ReceiptTicket) XXX_DiscardUnknown() {
xxx_messageInfo_ReceiptTicket.DiscardUnknown(m)
TicketId string `protobuf:"bytes,1,opt,name=ticketId" json:"ticketId,omitempty"`
Status int32 `protobuf:"varint,2,opt,name=status" json:"status,omitempty"`
PrevStatus int32 `protobuf:"varint,3,opt,name=prevStatus" json:"prevStatus,omitempty"`
Addr string `protobuf:"bytes,4,opt,name=addr" json:"addr,omitempty"`
}
var xxx_messageInfo_ReceiptTicket proto.InternalMessageInfo
func (m *ReceiptTicket) Reset() { *m = ReceiptTicket{} }
func (m *ReceiptTicket) String() string { return proto.CompactTextString(m) }
func (*ReceiptTicket) ProtoMessage() {}
func (*ReceiptTicket) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
func (m *ReceiptTicket) GetTicketId() string {
if m != nil {
......@@ -1058,38 +744,15 @@ func (m *ReceiptTicket) GetAddr() string {
}
type ReceiptTicketBind struct {
OldMinerAddress string `protobuf:"bytes,1,opt,name=oldMinerAddress,proto3" json:"oldMinerAddress,omitempty"`
NewMinerAddress string `protobuf:"bytes,2,opt,name=newMinerAddress,proto3" json:"newMinerAddress,omitempty"`
ReturnAddress string `protobuf:"bytes,3,opt,name=returnAddress,proto3" json:"returnAddress,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
OldMinerAddress string `protobuf:"bytes,1,opt,name=oldMinerAddress" json:"oldMinerAddress,omitempty"`
NewMinerAddress string `protobuf:"bytes,2,opt,name=newMinerAddress" json:"newMinerAddress,omitempty"`
ReturnAddress string `protobuf:"bytes,3,opt,name=returnAddress" json:"returnAddress,omitempty"`
}
func (m *ReceiptTicketBind) Reset() { *m = ReceiptTicketBind{} }
func (m *ReceiptTicketBind) String() string { return proto.CompactTextString(m) }
func (*ReceiptTicketBind) ProtoMessage() {}
func (*ReceiptTicketBind) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{14}
}
func (m *ReceiptTicketBind) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReceiptTicketBind.Unmarshal(m, b)
}
func (m *ReceiptTicketBind) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReceiptTicketBind.Marshal(b, m, deterministic)
}
func (m *ReceiptTicketBind) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReceiptTicketBind.Merge(m, src)
}
func (m *ReceiptTicketBind) XXX_Size() int {
return xxx_messageInfo_ReceiptTicketBind.Size(m)
}
func (m *ReceiptTicketBind) XXX_DiscardUnknown() {
xxx_messageInfo_ReceiptTicketBind.DiscardUnknown(m)
}
var xxx_messageInfo_ReceiptTicketBind proto.InternalMessageInfo
func (m *ReceiptTicketBind) Reset() { *m = ReceiptTicketBind{} }
func (m *ReceiptTicketBind) String() string { return proto.CompactTextString(m) }
func (*ReceiptTicketBind) ProtoMessage() {}
func (*ReceiptTicketBind) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
func (m *ReceiptTicketBind) GetOldMinerAddress() string {
if m != nil {
......@@ -1113,39 +776,16 @@ func (m *ReceiptTicketBind) GetReturnAddress() string {
}
type ReqBindMiner struct {
BindAddr string `protobuf:"bytes,1,opt,name=bindAddr,proto3" json:"bindAddr,omitempty"`
OriginAddr string `protobuf:"bytes,2,opt,name=originAddr,proto3" json:"originAddr,omitempty"`
Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"`
CheckBalance bool `protobuf:"varint,4,opt,name=checkBalance,proto3" json:"checkBalance,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ReqBindMiner) Reset() { *m = ReqBindMiner{} }
func (m *ReqBindMiner) String() string { return proto.CompactTextString(m) }
func (*ReqBindMiner) ProtoMessage() {}
func (*ReqBindMiner) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{15}
BindAddr string `protobuf:"bytes,1,opt,name=bindAddr" json:"bindAddr,omitempty"`
OriginAddr string `protobuf:"bytes,2,opt,name=originAddr" json:"originAddr,omitempty"`
Amount int64 `protobuf:"varint,3,opt,name=amount" json:"amount,omitempty"`
CheckBalance bool `protobuf:"varint,4,opt,name=checkBalance" json:"checkBalance,omitempty"`
}
func (m *ReqBindMiner) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqBindMiner.Unmarshal(m, b)
}
func (m *ReqBindMiner) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReqBindMiner.Marshal(b, m, deterministic)
}
func (m *ReqBindMiner) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReqBindMiner.Merge(m, src)
}
func (m *ReqBindMiner) XXX_Size() int {
return xxx_messageInfo_ReqBindMiner.Size(m)
}
func (m *ReqBindMiner) XXX_DiscardUnknown() {
xxx_messageInfo_ReqBindMiner.DiscardUnknown(m)
}
var xxx_messageInfo_ReqBindMiner proto.InternalMessageInfo
func (m *ReqBindMiner) Reset() { *m = ReqBindMiner{} }
func (m *ReqBindMiner) String() string { return proto.CompactTextString(m) }
func (*ReqBindMiner) ProtoMessage() {}
func (*ReqBindMiner) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
func (m *ReqBindMiner) GetBindAddr() string {
if m != nil {
......@@ -1176,36 +816,13 @@ func (m *ReqBindMiner) GetCheckBalance() bool {
}
type ReplyBindMiner struct {
TxHex string `protobuf:"bytes,1,opt,name=txHex,proto3" json:"txHex,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ReplyBindMiner) Reset() { *m = ReplyBindMiner{} }
func (m *ReplyBindMiner) String() string { return proto.CompactTextString(m) }
func (*ReplyBindMiner) ProtoMessage() {}
func (*ReplyBindMiner) Descriptor() ([]byte, []int) {
return fileDescriptor_98a6c21780e82d22, []int{16}
}
func (m *ReplyBindMiner) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReplyBindMiner.Unmarshal(m, b)
}
func (m *ReplyBindMiner) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReplyBindMiner.Marshal(b, m, deterministic)
}
func (m *ReplyBindMiner) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReplyBindMiner.Merge(m, src)
}
func (m *ReplyBindMiner) XXX_Size() int {
return xxx_messageInfo_ReplyBindMiner.Size(m)
}
func (m *ReplyBindMiner) XXX_DiscardUnknown() {
xxx_messageInfo_ReplyBindMiner.DiscardUnknown(m)
TxHex string `protobuf:"bytes,1,opt,name=txHex" json:"txHex,omitempty"`
}
var xxx_messageInfo_ReplyBindMiner proto.InternalMessageInfo
func (m *ReplyBindMiner) Reset() { *m = ReplyBindMiner{} }
func (m *ReplyBindMiner) String() string { return proto.CompactTextString(m) }
func (*ReplyBindMiner) ProtoMessage() {}
func (*ReplyBindMiner) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
func (m *ReplyBindMiner) GetTxHex() string {
if m != nil {
......@@ -1234,68 +851,6 @@ func init() {
proto.RegisterType((*ReplyBindMiner)(nil), "types.ReplyBindMiner")
}
func init() { proto.RegisterFile("ticket.proto", fileDescriptor_98a6c21780e82d22) }
var fileDescriptor_98a6c21780e82d22 = []byte{
// 890 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcd, 0x6e, 0x23, 0x45,
0x10, 0xf6, 0x78, 0x32, 0xb6, 0x53, 0x19, 0x27, 0x6c, 0x13, 0xd0, 0xc8, 0x42, 0x2b, 0xab, 0x85,
0xc0, 0xfc, 0x28, 0x40, 0x40, 0x08, 0xb8, 0xa0, 0x24, 0x12, 0xeb, 0x08, 0xcc, 0xa2, 0xce, 0x6a,
0x11, 0xc7, 0xf1, 0x4c, 0xdb, 0xdb, 0xca, 0xb8, 0x67, 0xe8, 0x69, 0x3b, 0xeb, 0x17, 0x40, 0xe2,
0xc0, 0x9d, 0x27, 0xe0, 0xc6, 0xf3, 0xf0, 0x3a, 0xa8, 0x6b, 0x7a, 0xfe, 0xec, 0x3d, 0x58, 0x82,
0xbd, 0xf9, 0xab, 0xfe, 0x6a, 0xaa, 0xea, 0xeb, 0xaa, 0x6a, 0x83, 0xaf, 0x45, 0x74, 0xcf, 0xf5,
0x45, 0xa6, 0x52, 0x9d, 0x12, 0x4f, 0x6f, 0x33, 0x9e, 0x8f, 0xfc, 0x28, 0x5d, 0xad, 0x52, 0x59,
0x18, 0xe9, 0x9f, 0x5d, 0xe8, 0x3d, 0x43, 0x16, 0x19, 0xc1, 0xa0, 0xe0, 0xdf, 0xc6, 0x81, 0x33,
0x76, 0x26, 0xc7, 0xac, 0xc2, 0xe4, 0x6d, 0xe8, 0xe5, 0x3a, 0xd4, 0xeb, 0x3c, 0xe8, 0x8e, 0x9d,
0x89, 0xc7, 0x2c, 0x22, 0xef, 0xc0, 0xb1, 0xc8, 0x9f, 0x70, 0xc9, 0x73, 0x91, 0x07, 0xee, 0xd8,
0x99, 0x0c, 0x58, 0x6d, 0x20, 0x8f, 0x01, 0x22, 0xc5, 0x43, 0xcd, 0x9f, 0x89, 0x15, 0x0f, 0x8e,
0xc6, 0xce, 0xc4, 0x65, 0x0d, 0x8b, 0xf1, 0x5e, 0x09, 0xc9, 0x15, 0x1e, 0x7b, 0x78, 0x5c, 0x1b,
0x8c, 0x37, 0x82, 0xe7, 0x61, 0xb2, 0xe6, 0xc1, 0xa0, 0xf0, 0xae, 0x2d, 0x84, 0x82, 0x8f, 0xe8,
0x2a, 0x8e, 0x15, 0xcf, 0xf3, 0xa0, 0x87, 0x39, 0xb7, 0x6c, 0xe4, 0x5d, 0x18, 0x2a, 0xae, 0xd7,
0x4a, 0x96, 0xa4, 0x3e, 0x92, 0xda, 0x46, 0x72, 0x0e, 0x5e, 0xa6, 0x44, 0xc4, 0x83, 0x63, 0x0c,
0x52, 0x00, 0xfa, 0x7b, 0x17, 0xfc, 0x42, 0x9a, 0xab, 0x48, 0x8b, 0x54, 0x92, 0x0f, 0xc0, 0xd3,
0x73, 0x21, 0x63, 0x4c, 0xf5, 0xe4, 0xf2, 0xd1, 0x05, 0x0a, 0x7a, 0x51, 0x70, 0xae, 0x85, 0x8c,
0xa7, 0x1d, 0x56, 0x30, 0x90, 0x9a, 0x66, 0x5c, 0xa2, 0x90, 0xbb, 0xd4, 0xa7, 0x19, 0x97, 0x48,
0x35, 0x0c, 0xf2, 0x29, 0xf4, 0x97, 0x56, 0xc0, 0x2e, 0x92, 0xcf, 0x5b, 0x64, 0xab, 0xe5, 0xb4,
0xc3, 0x4a, 0x1a, 0xf9, 0x18, 0x7a, 0x3a, 0x4a, 0xd2, 0x9c, 0xa3, 0xe2, 0x27, 0x97, 0xa4, 0xe5,
0x70, 0x63, 0x4e, 0xa6, 0x1d, 0x66, 0x39, 0xe4, 0x43, 0xf0, 0x50, 0x12, 0xd4, 0x7f, 0x97, 0x3c,
0x33, 0x27, 0x26, 0x17, 0xa4, 0x90, 0x53, 0xe8, 0xea, 0x6d, 0x00, 0x78, 0xc5, 0x5d, 0xbd, 0xbd,
0xee, 0x83, 0xb7, 0x31, 0x5a, 0xd3, 0x7f, 0x1c, 0x38, 0x69, 0x78, 0x10, 0x02, 0x47, 0x73, 0xa1,
0x73, 0x2c, 0x6f, 0xc8, 0xf0, 0xb7, 0xe9, 0x11, 0xc5, 0x1f, 0x42, 0x15, 0x63, 0x1d, 0x2e, 0xb3,
0xa8, 0xd5, 0x57, 0xee, 0x7e, 0x5f, 0xad, 0xd2, 0x58, 0x2c, 0xb6, 0x98, 0x9d, 0xcf, 0x2c, 0x32,
0x3e, 0x99, 0x12, 0x9b, 0x69, 0x98, 0xbf, 0x40, 0xb5, 0x7d, 0x56, 0x61, 0xe3, 0x93, 0xad, 0xe7,
0xdf, 0xf3, 0x2d, 0xde, 0xb8, 0xcf, 0x2c, 0x22, 0x01, 0xf4, 0x37, 0x6a, 0x81, 0x2e, 0x7d, 0x3c,
0x28, 0xa1, 0xf9, 0xda, 0x46, 0x2d, 0x7e, 0x52, 0x69, 0xba, 0xc0, 0x3e, 0xf2, 0x59, 0x85, 0x69,
0x06, 0xa7, 0x8d, 0xc2, 0x9e, 0x26, 0xf1, 0xeb, 0xae, 0x8d, 0x7e, 0x0d, 0xc7, 0x18, 0xeb, 0xbb,
0x24, 0x5c, 0x9a, 0x60, 0x8b, 0x24, 0x5c, 0x62, 0x30, 0x8f, 0xe1, 0x6f, 0x53, 0x88, 0xe2, 0x39,
0x57, 0x1b, 0x6e, 0xa3, 0x95, 0x90, 0x3e, 0x07, 0xa8, 0xbb, 0x6d, 0x6f, 0x00, 0x9c, 0x43, 0x06,
0xa0, 0xfb, 0x8a, 0x01, 0xa0, 0x7f, 0x39, 0xe5, 0x87, 0x4d, 0x6f, 0x1e, 0xf4, 0xe1, 0x73, 0xf0,
0xa2, 0x74, 0x2d, 0xb5, 0x5d, 0x08, 0x05, 0xd8, 0x0f, 0xe7, 0xbe, 0x6a, 0xde, 0x46, 0x30, 0x50,
0xa1, 0x8c, 0xef, 0x38, 0x8f, 0xed, 0x56, 0xa8, 0xb0, 0xd9, 0x09, 0xd9, 0x7a, 0x6e, 0xae, 0x8d,
0xe7, 0x81, 0x37, 0x76, 0x27, 0x3e, 0xab, 0x0d, 0x34, 0x85, 0x61, 0x6b, 0x2c, 0xfe, 0x3f, 0x0d,
0xea, 0x82, 0xdc, 0x46, 0x41, 0x74, 0x56, 0xf6, 0x3d, 0x8e, 0xd5, 0xce, 0x8e, 0x74, 0x5b, 0xf7,
0xbd, 0x9b, 0x4a, 0x77, 0x3f, 0x15, 0xfa, 0x55, 0xa9, 0xf3, 0x0f, 0x22, 0xd7, 0xe6, 0xf2, 0xc3,
0x38, 0x56, 0x36, 0x69, 0xfc, 0xdd, 0xd8, 0xb4, 0x6e, 0x73, 0xd3, 0xd2, 0x8f, 0xca, 0x44, 0x6e,
0xe5, 0x22, 0xc5, 0xc5, 0x5b, 0x06, 0xce, 0x6d, 0x26, 0xb5, 0x81, 0x7e, 0x03, 0x67, 0x8c, 0x67,
0xc9, 0xb6, 0x11, 0xeb, 0x7d, 0xe8, 0x17, 0xe7, 0x05, 0xfd, 0xe4, 0x72, 0xd8, 0x5a, 0x04, 0xac,
0x3c, 0xa5, 0xbf, 0x00, 0x41, 0xdf, 0x9f, 0xc3, 0x24, 0xe1, 0xba, 0x38, 0xcd, 0x0f, 0x76, 0x2f,
0x27, 0xf7, 0x9e, 0x6f, 0x8d, 0x02, 0x6e, 0x39, 0xb9, 0x06, 0xd3, 0x07, 0x18, 0x32, 0x1e, 0x71,
0x91, 0xe9, 0xff, 0xf0, 0xe4, 0x3c, 0x06, 0xc8, 0x14, 0xdf, 0xdc, 0x35, 0x45, 0x6a, 0x58, 0x2a,
0x51, 0x8f, 0x6a, 0x51, 0xe9, 0x1f, 0x0e, 0x3c, 0x6a, 0x45, 0xc6, 0xf9, 0x99, 0xc0, 0x59, 0x9a,
0xc4, 0xb3, 0xfd, 0xf6, 0xd9, 0x35, 0x1b, 0xa6, 0xe4, 0x0f, 0xb3, 0xfd, 0xdb, 0xdd, 0x35, 0x1f,
0x36, 0x00, 0xf4, 0x37, 0x07, 0x7c, 0xc6, 0x7f, 0x35, 0x59, 0x14, 0xfb, 0x74, 0x04, 0x03, 0xf3,
0x6e, 0x5c, 0xd5, 0xdd, 0x50, 0x61, 0x53, 0x70, 0xaa, 0xc4, 0x52, 0xa0, 0xb7, 0x8d, 0xdb, 0xb0,
0x18, 0xa1, 0xc2, 0x55, 0xd5, 0xb9, 0x2e, 0xb3, 0xc8, 0xf4, 0x63, 0xf4, 0x82, 0x47, 0xf7, 0xd7,
0x61, 0x12, 0xca, 0xa8, 0x78, 0x7f, 0x07, 0xac, 0x65, 0xa3, 0xef, 0xc1, 0x29, 0x5e, 0x76, 0x9d,
0xc9, 0x39, 0x78, 0xfa, 0xe5, 0x94, 0xbf, 0xb4, 0x69, 0x14, 0xe0, 0xf2, 0x6f, 0x07, 0x7a, 0xc5,
0xcd, 0x90, 0x6f, 0xe1, 0xec, 0x06, 0x9f, 0xf0, 0xda, 0xe7, 0x4d, 0xdb, 0x0b, 0xcd, 0x92, 0x46,
0x6f, 0x55, 0xc6, 0xe6, 0xf7, 0x69, 0x87, 0x7c, 0x02, 0xa7, 0x4f, 0xca, 0xc6, 0xba, 0xc1, 0x4c,
0x87, 0xb5, 0xff, 0x8f, 0x22, 0x19, 0xf9, 0x16, 0xde, 0x4a, 0xfd, 0xe5, 0x17, 0xb4, 0x43, 0x3e,
0x83, 0xe1, 0x1d, 0xd7, 0x57, 0x6b, 0x9d, 0xce, 0x84, 0x14, 0x72, 0x49, 0xde, 0xb0, 0x84, 0x6a,
0x8d, 0x56, 0x2e, 0x18, 0x8c, 0x76, 0xe6, 0x3d, 0xfc, 0x77, 0xf3, 0xf9, 0xbf, 0x01, 0x00, 0x00,
0xff, 0xff, 0x2a, 0xad, 0x66, 0x94, 0x02, 0x09, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn
......@@ -1304,17 +859,16 @@ var _ grpc.ClientConn
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4
// TicketClient is the client API for Ticket service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
// Client API for Ticket service
type TicketClient interface {
//创建绑定挖矿
// 创建绑定挖矿
CreateBindMiner(ctx context.Context, in *ReqBindMiner, opts ...grpc.CallOption) (*ReplyBindMiner, error)
//查询钱包票数
GetTicketCount(ctx context.Context, in *types.ReqNil, opts ...grpc.CallOption) (*types.Int64, error)
// 查询钱包票数
GetTicketCount(ctx context.Context, in *types1.ReqNil, opts ...grpc.CallOption) (*types1.Int64, error)
// Miner
//设置自动挖矿
SetAutoMining(ctx context.Context, in *MinerFlag, opts ...grpc.CallOption) (*types.Reply, error)
// 设置自动挖矿
SetAutoMining(ctx context.Context, in *MinerFlag, opts ...grpc.CallOption) (*types1.Reply, error)
}
type ticketClient struct {
......@@ -1327,40 +881,41 @@ func NewTicketClient(cc *grpc.ClientConn) TicketClient {
func (c *ticketClient) CreateBindMiner(ctx context.Context, in *ReqBindMiner, opts ...grpc.CallOption) (*ReplyBindMiner, error) {
out := new(ReplyBindMiner)
err := c.cc.Invoke(ctx, "/types.ticket/CreateBindMiner", in, out, opts...)
err := grpc.Invoke(ctx, "/types.ticket/CreateBindMiner", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *ticketClient) GetTicketCount(ctx context.Context, in *types.ReqNil, opts ...grpc.CallOption) (*types.Int64, error) {
out := new(types.Int64)
err := c.cc.Invoke(ctx, "/types.ticket/GetTicketCount", in, out, opts...)
func (c *ticketClient) GetTicketCount(ctx context.Context, in *types1.ReqNil, opts ...grpc.CallOption) (*types1.Int64, error) {
out := new(types1.Int64)
err := grpc.Invoke(ctx, "/types.ticket/GetTicketCount", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *ticketClient) SetAutoMining(ctx context.Context, in *MinerFlag, opts ...grpc.CallOption) (*types.Reply, error) {
out := new(types.Reply)
err := c.cc.Invoke(ctx, "/types.ticket/SetAutoMining", in, out, opts...)
func (c *ticketClient) SetAutoMining(ctx context.Context, in *MinerFlag, opts ...grpc.CallOption) (*types1.Reply, error) {
out := new(types1.Reply)
err := grpc.Invoke(ctx, "/types.ticket/SetAutoMining", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// TicketServer is the server API for Ticket service.
// Server API for Ticket service
type TicketServer interface {
//创建绑定挖矿
// 创建绑定挖矿
CreateBindMiner(context.Context, *ReqBindMiner) (*ReplyBindMiner, error)
//查询钱包票数
GetTicketCount(context.Context, *types.ReqNil) (*types.Int64, error)
// 查询钱包票数
GetTicketCount(context.Context, *types1.ReqNil) (*types1.Int64, error)
// Miner
//设置自动挖矿
SetAutoMining(context.Context, *MinerFlag) (*types.Reply, error)
// 设置自动挖矿
SetAutoMining(context.Context, *MinerFlag) (*types1.Reply, error)
}
func RegisterTicketServer(s *grpc.Server, srv TicketServer) {
......@@ -1386,7 +941,7 @@ func _Ticket_CreateBindMiner_Handler(srv interface{}, ctx context.Context, dec f
}
func _Ticket_GetTicketCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(types.ReqNil)
in := new(types1.ReqNil)
if err := dec(in); err != nil {
return nil, err
}
......@@ -1398,7 +953,7 @@ func _Ticket_GetTicketCount_Handler(srv interface{}, ctx context.Context, dec fu
FullMethod: "/types.ticket/GetTicketCount",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TicketServer).GetTicketCount(ctx, req.(*types.ReqNil))
return srv.(TicketServer).GetTicketCount(ctx, req.(*types1.ReqNil))
}
return interceptor(ctx, in, info, handler)
}
......@@ -1441,3 +996,64 @@ var _Ticket_serviceDesc = grpc.ServiceDesc{
Streams: []grpc.StreamDesc{},
Metadata: "ticket.proto",
}
func init() { proto.RegisterFile("ticket.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 877 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xdd, 0x6e, 0xeb, 0x44,
0x10, 0x8e, 0xed, 0x3a, 0x49, 0xa7, 0x4e, 0xcb, 0x59, 0x0a, 0xb2, 0x22, 0x74, 0x14, 0xad, 0x10,
0x84, 0x1f, 0x15, 0x28, 0x08, 0x01, 0x37, 0xa8, 0xad, 0xc4, 0x49, 0x25, 0xc2, 0x41, 0xdb, 0xa3,
0x83, 0xb8, 0x74, 0xed, 0x4d, 0xce, 0xaa, 0xce, 0xda, 0xac, 0x37, 0xe9, 0xc9, 0x0b, 0x20, 0x71,
0xc1, 0x3d, 0x4f, 0xc0, 0x1d, 0xcf, 0xc0, 0xab, 0xa1, 0x1d, 0xaf, 0xff, 0x92, 0x5e, 0x54, 0x02,
0xee, 0xf2, 0xcd, 0x7c, 0xe3, 0x99, 0xf9, 0x76, 0x66, 0x37, 0x10, 0x68, 0x11, 0xdf, 0x71, 0x7d,
0x96, 0xab, 0x4c, 0x67, 0xc4, 0xd7, 0xdb, 0x9c, 0x17, 0xe3, 0x20, 0xce, 0x56, 0xab, 0x4c, 0x96,
0x46, 0xfa, 0x87, 0x0b, 0xfd, 0x17, 0xc8, 0x22, 0x63, 0x18, 0x96, 0xfc, 0xeb, 0x24, 0x74, 0x26,
0xce, 0xf4, 0x90, 0xd5, 0x98, 0xbc, 0x0d, 0xfd, 0x42, 0x47, 0x7a, 0x5d, 0x84, 0xee, 0xc4, 0x99,
0xfa, 0xcc, 0x22, 0xf2, 0x0e, 0x1c, 0x8a, 0xe2, 0x19, 0x97, 0xbc, 0x10, 0x45, 0xe8, 0x4d, 0x9c,
0xe9, 0x90, 0x35, 0x06, 0xf2, 0x14, 0x20, 0x56, 0x3c, 0xd2, 0xfc, 0x85, 0x58, 0xf1, 0xf0, 0x60,
0xe2, 0x4c, 0x3d, 0xd6, 0xb2, 0x98, 0xe8, 0x95, 0x90, 0x5c, 0xa1, 0xdb, 0x47, 0x77, 0x63, 0x30,
0xd1, 0x08, 0x5e, 0x46, 0xe9, 0x9a, 0x87, 0xc3, 0x32, 0xba, 0xb1, 0x10, 0x0a, 0x01, 0xa2, 0x8b,
0x24, 0x51, 0xbc, 0x28, 0xc2, 0x3e, 0xd6, 0xdc, 0xb1, 0x91, 0x77, 0x61, 0xa4, 0xb8, 0x5e, 0x2b,
0x59, 0x91, 0x06, 0x48, 0xea, 0x1a, 0xc9, 0x29, 0xf8, 0xb9, 0x12, 0x31, 0x0f, 0x0f, 0x31, 0x49,
0x09, 0xe8, 0x6f, 0x2e, 0x04, 0xa5, 0x34, 0x17, 0xb1, 0x16, 0x99, 0x24, 0x1f, 0x80, 0xaf, 0x6f,
0x85, 0x4c, 0xb0, 0xd4, 0xa3, 0xf3, 0x27, 0x67, 0x28, 0xe8, 0x59, 0xc9, 0xb9, 0x14, 0x32, 0x99,
0xf5, 0x58, 0xc9, 0x40, 0x6a, 0x96, 0x73, 0x89, 0x42, 0xee, 0x52, 0x9f, 0xe7, 0x5c, 0x22, 0xd5,
0x30, 0xc8, 0xa7, 0x30, 0x58, 0x5a, 0x01, 0x5d, 0x24, 0x9f, 0x76, 0xc8, 0x56, 0xcb, 0x59, 0x8f,
0x55, 0x34, 0xf2, 0x31, 0xf4, 0x75, 0x9c, 0x66, 0x05, 0x47, 0xc5, 0x8f, 0xce, 0x49, 0x27, 0xe0,
0xca, 0x78, 0x66, 0x3d, 0x66, 0x39, 0xe4, 0x43, 0xf0, 0x51, 0x12, 0xd4, 0x7f, 0x97, 0x3c, 0x37,
0x1e, 0x53, 0x0b, 0x52, 0xc8, 0x31, 0xb8, 0x7a, 0x1b, 0x02, 0x1e, 0xb1, 0xab, 0xb7, 0x97, 0x03,
0xf0, 0x37, 0x46, 0x6b, 0xfa, 0xb7, 0x03, 0x47, 0xad, 0x08, 0x42, 0xe0, 0xe0, 0x56, 0xe8, 0x02,
0xdb, 0x1b, 0x31, 0xfc, 0x6d, 0x66, 0x44, 0xf1, 0xfb, 0x48, 0x25, 0xd8, 0x87, 0xc7, 0x2c, 0xea,
0xcc, 0x95, 0xb7, 0x3f, 0x57, 0xab, 0x2c, 0x11, 0x8b, 0x2d, 0x56, 0x17, 0x30, 0x8b, 0x4c, 0x4c,
0xae, 0xc4, 0x66, 0x16, 0x15, 0xaf, 0x50, 0xed, 0x80, 0xd5, 0x98, 0x84, 0x30, 0xd8, 0xa8, 0x05,
0xba, 0xfa, 0xe8, 0xaa, 0xa0, 0x89, 0xda, 0xa8, 0xc5, 0x8f, 0x2a, 0xcb, 0x16, 0x78, 0xd0, 0x01,
0xab, 0x31, 0xcd, 0xe1, 0xb8, 0xd5, 0xc0, 0xf3, 0x34, 0xf9, 0xbf, 0x7b, 0xa0, 0x5f, 0xc3, 0x21,
0xe6, 0xfa, 0x2e, 0x8d, 0x96, 0x26, 0xd9, 0x22, 0x8d, 0x96, 0x98, 0xcc, 0x67, 0xf8, 0xdb, 0x34,
0xa2, 0x78, 0xc1, 0xd5, 0x86, 0xdb, 0x6c, 0x15, 0xa4, 0x2f, 0x01, 0x9a, 0xa9, 0xda, 0x1b, 0x74,
0xe7, 0x31, 0x83, 0xee, 0x3e, 0x30, 0xe8, 0xf4, 0x4f, 0xa7, 0xfa, 0xb0, 0x99, 0xc1, 0x47, 0x7d,
0xf8, 0x14, 0xfc, 0x38, 0x5b, 0x4b, 0x6d, 0x17, 0xbf, 0x04, 0xfb, 0xe9, 0xbc, 0x87, 0xf6, 0x6a,
0x0c, 0x43, 0x15, 0xc9, 0xe4, 0x86, 0xf3, 0xc4, 0x6e, 0x7f, 0x8d, 0xcd, 0xee, 0xe7, 0xeb, 0x5b,
0x73, 0x6c, 0xbc, 0x08, 0xfd, 0x89, 0x37, 0x0d, 0x58, 0x63, 0xa0, 0x19, 0x8c, 0x3a, 0xe3, 0xff,
0xdf, 0x69, 0xd0, 0x34, 0xe4, 0xb5, 0x1a, 0xa2, 0xf3, 0x6a, 0xbe, 0x71, 0x7d, 0x76, 0xee, 0x42,
0xaf, 0x73, 0xde, 0xbb, 0xa5, 0xb8, 0xfb, 0xa5, 0xd0, 0xaf, 0x2a, 0x9d, 0xbf, 0x17, 0x85, 0x36,
0x87, 0x1f, 0x25, 0x89, 0xb2, 0x45, 0xe3, 0xef, 0xd6, 0x8d, 0xea, 0xb5, 0x6f, 0x54, 0xfa, 0x51,
0x55, 0xc8, 0xb5, 0x5c, 0x64, 0x78, 0xc1, 0x56, 0x89, 0x0b, 0x5b, 0x49, 0x63, 0xa0, 0xdf, 0xc0,
0x09, 0xe3, 0x79, 0xba, 0x6d, 0xe5, 0x7a, 0x1f, 0x06, 0xa5, 0xbf, 0xa4, 0x1f, 0x9d, 0x8f, 0x3a,
0x0b, 0xcf, 0x2a, 0x2f, 0xfd, 0x19, 0x08, 0xc6, 0xfe, 0x14, 0xa5, 0x29, 0xd7, 0xa5, 0xb7, 0x78,
0x74, 0x78, 0xb5, 0xa1, 0x77, 0x7c, 0x6b, 0x14, 0xf0, 0xaa, 0x0d, 0x35, 0x98, 0xde, 0xc3, 0x88,
0xf1, 0x98, 0x8b, 0x5c, 0xff, 0x8b, 0xa7, 0xe5, 0x29, 0x40, 0xae, 0xf8, 0xe6, 0xa6, 0x2d, 0x52,
0xcb, 0x52, 0x8b, 0x7a, 0xd0, 0x88, 0x4a, 0x7f, 0x77, 0xe0, 0x49, 0x27, 0x33, 0xee, 0xcf, 0x14,
0x4e, 0xb2, 0x34, 0x99, 0xef, 0x8f, 0xcf, 0xae, 0xd9, 0x30, 0x25, 0xbf, 0x9f, 0xef, 0x9f, 0xee,
0xae, 0xf9, 0x71, 0x0b, 0x40, 0x7f, 0x75, 0x20, 0x60, 0xfc, 0x17, 0x53, 0x45, 0x79, 0x6f, 0x8e,
0x61, 0x68, 0xde, 0x87, 0x8b, 0x66, 0x1a, 0x6a, 0x6c, 0x1a, 0xce, 0x94, 0x58, 0x0a, 0x8c, 0xb6,
0x79, 0x5b, 0x16, 0x23, 0x54, 0xb4, 0xaa, 0x27, 0xd7, 0x63, 0x16, 0x99, 0x79, 0x8c, 0x5f, 0xf1,
0xf8, 0xee, 0x32, 0x4a, 0x23, 0x19, 0x97, 0xef, 0xec, 0x90, 0x75, 0x6c, 0xf4, 0x3d, 0x38, 0xc6,
0xc3, 0x6e, 0x2a, 0x39, 0x05, 0x5f, 0xbf, 0x9e, 0xf1, 0xd7, 0xb6, 0x8c, 0x12, 0x9c, 0xff, 0xe5,
0x40, 0xbf, 0x3c, 0x19, 0xf2, 0x2d, 0x9c, 0x5c, 0xe1, 0x53, 0xdd, 0xc4, 0xbc, 0x69, 0x67, 0xa1,
0xdd, 0xd2, 0xf8, 0xad, 0xda, 0xd8, 0xfe, 0x3e, 0xed, 0x91, 0x4f, 0xe0, 0xf8, 0x59, 0x35, 0x58,
0x57, 0x58, 0xe9, 0xa8, 0x89, 0xff, 0x41, 0xa4, 0xe3, 0xc0, 0xc2, 0x6b, 0xa9, 0xbf, 0xfc, 0x82,
0xf6, 0xc8, 0x67, 0x30, 0xba, 0xe1, 0xfa, 0x62, 0xad, 0xb3, 0xb9, 0x90, 0x42, 0x2e, 0xc9, 0x1b,
0x96, 0x50, 0x5f, 0xa3, 0x75, 0x08, 0x26, 0xa3, 0xbd, 0xdb, 0x3e, 0xfe, 0x8b, 0xf9, 0xfc, 0x9f,
0x00, 0x00, 0x00, 0xff, 0xff, 0xcb, 0x56, 0xb4, 0x54, 0xea, 0x08, 0x00, 0x00,
}
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