Unverified Commit 296793d9 authored by 33cn's avatar 33cn Committed by GitHub

Merge pull request #64 from vipwzw/fix_ticket_tclose_test

Fix ticket tclose test
parents 44464808 1707a867
Title="local"
TestNet=true
FixTime=false
[log]
# 日志级别,支持debug(dbug)/info/warn/error(eror)/crit
loglevel = "debug"
logConsoleLevel = "info"
# 日志文件名,可带目录,所有生成的日志文件都放到此目录下
logFile = "logs/chain33.log"
# 单个日志文件的最大值(单位:兆)
maxFileSize = 300
# 最多保存的历史日志文件个数
maxBackups = 100
# 最多保存的历史日志消息(单位:天)
maxAge = 28
# 日志文件名是否使用本地事件(否则使用UTC时间)
localTime = true
# 历史日志文件是否压缩(压缩格式为gz)
compress = true
# 是否打印调用源文件和行号
callerFile = false
# 是否打印调用方法
callerFunction = false
[blockchain]
defCacheSize=128
maxFetchBlockNum=128
timeoutSeconds=5
batchBlockNum=128
driver="memdb"
dbPath="datadir"
dbCache=64
isStrongConsistency=false
singleMode=true
batchsync=false
isRecordBlockSequence=true
isParaChain=false
enableTxQuickIndex=false
[p2p]
seeds=[]
enable=false
isSeed=false
serverStart=true
innerSeedEnable=true
useGithub=true
innerBounds=300
msgCacheSize=10240
driver="memdb"
dbPath="datadir/addrbook"
dbCache=4
grpcLogFile="grpc33.log"
[rpc]
jrpcBindAddr="localhost:0"
grpcBindAddr="localhost:0"
whitelist=["127.0.0.1"]
jrpcFuncWhitelist=["*"]
grpcFuncWhitelist=["*"]
[mempool]
poolCacheSize=10240
minTxFee=100000
maxTxNumPerAccount=10000
[consensus]
name="ticket"
minerstart=true
genesisBlockTime=1514533394
genesis="14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
[mver.consensus]
fundKeyAddr = "1BQXS6TxaYYG5mADaWij4AxhZZUTpw95a5"
coinReward = 18
coinDevFund = 12
ticketPrice = 10000
powLimitBits = "0x1f00ffff"
retargetAdjustmentFactor = 4
futureBlockTime = 16
ticketFrozenTime = 5
ticketWithdrawTime = 10
ticketMinerWaitTime = 2
maxTxNumber = 1600
targetTimespan = 2304
targetTimePerBlock = 16
[mver.consensus.ForkChainParamV1]
maxTxNumber = 10000
targetTimespan = 288 #only for test
targetTimePerBlock = 2
[mver.consensus.ForkChainParamV2]
powLimitBits = "0x1f2fffff"
[consensus.sub.solo]
genesis="14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
genesisBlockTime=1514533394
waitTxMs=10
[consensus.sub.ticket]
genesisBlockTime=1514533394
[[consensus.sub.ticket.genesis]]
minerAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
returnAddr="14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
count=10000
[[consensus.sub.ticket.genesis]]
minerAddr="1PUiGcbsccfxW3zuvHXZBJfznziph5miAo"
returnAddr="1EbDHAXpoiewjPLX9uqoz38HsKqMXayZrF"
count=10000
[[consensus.sub.ticket.genesis]]
minerAddr="1EDnnePAZN48aC2hiTDzhkczfF39g1pZZX"
returnAddr="1KcCVZLSQYRUwE5EXTsAoQs9LuJW6xwfQa"
count=10000
[store]
name="mavl"
driver="memdb"
dbPath="datadir/mavltree"
dbCache=128
[store.sub.mavl]
enableMavlPrefix=false
enableMVCC=false
[wallet]
minFee=100000
driver="memdb"
dbPath="wallet"
dbCache=16
signType="secp256k1"
[wallet.sub.ticket]
minerdisable=false
minerwhitelist=["*"]
minerWaitTime="1s"
[exec]
isFree=false
minExecFee=100000
enableStat=false
enableMVCC=false
alias=["token1:token","token2:token","token3:token"]
[exec.sub.token]
saveTokenTxList=true
tokenApprs = [
"1Bsg9j6gW83sShoee1fZAt9TkUjcrCgA9S",
"1Q8hGLfoGe63efeWa8fJ4Pnukhkngt6poK",
"1LY8GFia5EiyoTodMLfkB5PHNNpXRqxhyB",
"1GCzJDS6HbgTQ2emade7mEJGGWFfA15pS9",
"1JYB8sxi4He5pZWHCd3Zi2nypQ4JMB6AxN",
"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv",
]
[exec.sub.relay]
genesis="14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
[exec.sub.cert]
# 是否启用证书验证和签名
enable=false
# 加密文件路径
cryptoPath="authdir/crypto"
# 带证书签名类型,支持"auth_ecdsa", "auth_sm2"
signType="auth_ecdsa"
[exec.sub.manage]
superManager=[
"1Bsg9j6gW83sShoee1fZAt9TkUjcrCgA9S",
"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv",
"1Q8hGLfoGe63efeWa8fJ4Pnukhkngt6poK"
]
...@@ -5,13 +5,15 @@ ...@@ -5,13 +5,15 @@
package ticket package ticket
import ( import (
"fmt"
"testing" "testing"
"github.com/33cn/chain33/types" "github.com/33cn/chain33/account"
"github.com/33cn/chain33/common/crypto" "github.com/33cn/chain33/common/crypto"
"github.com/33cn/chain33/queue" "github.com/33cn/chain33/queue"
_ "github.com/33cn/chain33/system" _ "github.com/33cn/chain33/system"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/util"
"github.com/33cn/chain33/util/testnode" "github.com/33cn/chain33/util/testnode"
_ "github.com/33cn/plugin/plugin/dapp/init" _ "github.com/33cn/plugin/plugin/dapp/init"
ty "github.com/33cn/plugin/plugin/dapp/ticket/types" ty "github.com/33cn/plugin/plugin/dapp/ticket/types"
...@@ -21,12 +23,68 @@ import ( ...@@ -21,12 +23,68 @@ import (
// 执行: go test -cover // 执行: go test -cover
func TestTicket(t *testing.T) { func TestTicket(t *testing.T) {
cfg, sub := testnode.GetDefaultConfig() mock33 := testnode.New("testdata/chain33.cfg.toml", nil)
cfg.Consensus.Name = "ticket"
mock33 := testnode.NewWithConfig(cfg, sub, nil)
defer mock33.Close() defer mock33.Close()
err := mock33.WaitHeight(100) mock33.Listen()
reply, err := mock33.GetAPI().ExecWalletFunc("ticket", "WalletAutoMiner", &ty.MinerFlag{Flag: 1})
assert.Nil(t, err)
assert.Equal(t, true, reply.(*types.Reply).IsOk)
acc := account.NewCoinsAccount()
addr := mock33.GetGenesisAddress()
accounts, err := acc.GetBalance(mock33.GetAPI(), &types.ReqBalance{Execer: "ticket", Addresses: []string{addr}})
assert.Nil(t, err)
assert.Equal(t, accounts[0].Balance, int64(0))
hotaddr := mock33.GetHotAddress()
accounts, err = acc.GetBalance(mock33.GetAPI(), &types.ReqBalance{Execer: "coins", Addresses: []string{hotaddr}})
assert.Nil(t, err)
assert.Equal(t, accounts[0].Balance, int64(1000000000000))
//send to address
tx := util.CreateCoinsTx(mock33.GetHotKey(), mock33.GetGenesisAddress(), types.Coin/100)
mock33.SendTx(tx)
mock33.Wait()
//bind miner
tx = createBindMiner(t, hotaddr, addr, mock33.GetGenesisKey())
hash := mock33.SendTx(tx)
detail, err := mock33.WaitTx(hash)
assert.Nil(t, err)
//debug:
//js, _ := json.MarshalIndent(detail, "", " ")
//fmt.Println(string(js))
assert.Equal(t, int32(2), detail.Receipt.Ty)
reply, err = mock33.GetAPI().ExecWalletFunc("ticket", "WalletAutoMiner", &ty.MinerFlag{Flag: 1})
assert.Nil(t, err)
err = mock33.WaitHeight(100)
assert.Nil(t, err)
//查询票是否自动close,并且购买了新的票
req := &types.ReqWalletTransactionList{Count: 1000}
list, err := mock33.GetAPI().WalletTransactionList(req)
assert.Nil(t, err)
hastclose := false
hastopen := false
for _, tx := range list.TxDetails {
if tx.ActionName == "tclose" && tx.Receipt.Ty == 2 {
hastclose = true
}
if tx.ActionName == "topen" && tx.Receipt.Ty == 2 {
hastopen = true
}
}
assert.Equal(t, true, hastclose)
assert.Equal(t, true, hastopen)
//查询合约中的余额
accounts, err = acc.GetBalance(mock33.GetAPI(), &types.ReqBalance{Execer: "ticket", Addresses: []string{addr}})
assert.Nil(t, err)
fmt.Println(accounts[0])
}
func createBindMiner(t *testing.T, m, r string, priv crypto.PrivKey) *types.Transaction {
ety := types.LoadExecutorType("ticket")
tx, err := ety.Create("Tbind", &ty.TicketBind{MinerAddress: m, ReturnAddress: r})
assert.Nil(t, err)
tx, err = types.FormatTx("ticket", tx)
assert.Nil(t, err) assert.Nil(t, err)
tx.Sign(types.SECP256K1, priv)
return tx
} }
func TestTicketMap(t *testing.T) { func TestTicketMap(t *testing.T) {
......
...@@ -49,15 +49,17 @@ type ticketPolicy struct { ...@@ -49,15 +49,17 @@ type ticketPolicy struct {
} }
type subConfig struct { type subConfig struct {
MinerWaitTime string `json:"minerWaitTime"`
ForceMining bool `json:"forceMining"` ForceMining bool `json:"forceMining"`
Minerdisable bool `json:"minerdisable"` Minerdisable bool `json:"minerdisable"`
Minerwhitelist []string `json:"minerwhitelist"` Minerwhitelist []string `json:"minerwhitelist"`
} }
func (policy *ticketPolicy) initMingTicketTicker() { func (policy *ticketPolicy) initMingTicketTicker(wait time.Duration) {
policy.mtx.Lock() policy.mtx.Lock()
defer policy.mtx.Unlock() defer policy.mtx.Unlock()
policy.miningTicketTicker = time.NewTicker(2 * time.Minute) bizlog.Info("initMingTicketTicker", "Duration", wait)
policy.miningTicketTicker = time.NewTicker(wait)
} }
func (policy *ticketPolicy) getMingTicketTicker() *time.Ticker { func (policy *ticketPolicy) getMingTicketTicker() *time.Ticker {
...@@ -107,8 +109,14 @@ func (policy *ticketPolicy) Init(walletBiz wcom.WalletOperate, sub []byte) { ...@@ -107,8 +109,14 @@ func (policy *ticketPolicy) Init(walletBiz wcom.WalletOperate, sub []byte) {
} }
policy.cfg = &subcfg policy.cfg = &subcfg
policy.initMinerWhiteList(walletBiz.GetConfig()) policy.initMinerWhiteList(walletBiz.GetConfig())
wait := 2 * time.Minute
policy.initMingTicketTicker() if subcfg.MinerWaitTime != "" {
d, err := time.ParseDuration(subcfg.MinerWaitTime)
if err == nil {
wait = d
}
}
policy.initMingTicketTicker(wait)
walletBiz.RegisterMineStatusReporter(policy) walletBiz.RegisterMineStatusReporter(policy)
// 启动自动挖矿 // 启动自动挖矿
walletBiz.GetWaitGroup().Add(1) walletBiz.GetWaitGroup().Add(1)
......
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