mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-06-28 08:52:31 +00:00
Merge branch 'dev-31-20-tmp-branch' into dev-31-convert-time-int64
This commit is contained in:
commit
f1e24fcd43
@ -6,11 +6,14 @@ package mining
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"math"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/daglabs/btcd/blockdag"
|
"github.com/daglabs/btcd/blockdag"
|
||||||
|
"github.com/daglabs/btcd/btcec"
|
||||||
|
"github.com/daglabs/btcd/dagconfig"
|
||||||
"github.com/daglabs/btcd/dagconfig/daghash"
|
"github.com/daglabs/btcd/dagconfig/daghash"
|
||||||
|
"github.com/daglabs/btcd/txscript"
|
||||||
"github.com/daglabs/btcd/wire"
|
"github.com/daglabs/btcd/wire"
|
||||||
"github.com/daglabs/btcutil"
|
"github.com/daglabs/btcutil"
|
||||||
)
|
)
|
||||||
@ -55,6 +58,61 @@ func newUtxoViewpoint(sourceTxns []*wire.MsgTx, sourceTxHeights []int32) *blockd
|
|||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getTxIn(originTx *wire.MsgTx, outputIndex uint32) *wire.TxIn {
|
||||||
|
var prevOut *wire.OutPoint
|
||||||
|
if originTx != nil {
|
||||||
|
originTxHash := originTx.TxHash()
|
||||||
|
prevOut = wire.NewOutPoint(&originTxHash, 0)
|
||||||
|
} else {
|
||||||
|
prevOut = &wire.OutPoint{
|
||||||
|
Hash: daghash.Hash{},
|
||||||
|
Index: 0xFFFFFFFF,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return wire.NewTxIn(prevOut, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func createTransaction(value int64, originTx *wire.MsgTx, outputIndex uint32, sigScript []byte) (*wire.MsgTx, error) {
|
||||||
|
lookupKey := func(a btcutil.Address) (*btcec.PrivateKey, bool, error) {
|
||||||
|
// Ordinarily this function would involve looking up the private
|
||||||
|
// key for the provided address, but since the only thing being
|
||||||
|
// signed in this example uses the address associated with the
|
||||||
|
// private key from above, simply return it with the compressed
|
||||||
|
// flag set since the address is using the associated compressed
|
||||||
|
// public key.
|
||||||
|
//
|
||||||
|
// NOTE: If you want to prove the code is actually signing the
|
||||||
|
// transaction properly, uncomment the following line which
|
||||||
|
// intentionally returns an invalid key to sign with, which in
|
||||||
|
// turn will result in a failure during the script execution
|
||||||
|
// when verifying the signature.
|
||||||
|
//
|
||||||
|
// privKey.D.SetInt64(12345)
|
||||||
|
//
|
||||||
|
return privKey, true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
redeemTx := wire.NewMsgTx(wire.TxVersion)
|
||||||
|
|
||||||
|
redeemTx.AddTxIn(getTxIn(originTx, outputIndex))
|
||||||
|
|
||||||
|
pkScript, err := txscript.PayToAddrScript(addr)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
txOut := wire.NewTxOut(value, pkScript)
|
||||||
|
redeemTx.AddTxOut(txOut)
|
||||||
|
if sigScript == nil {
|
||||||
|
sigScript, err = txscript.SignTxOutput(&dagconfig.MainNetParams,
|
||||||
|
redeemTx, 0, originTx.TxOut[0].PkScript, txscript.SigHashAll,
|
||||||
|
txscript.KeyClosure(lookupKey), nil, nil)
|
||||||
|
}
|
||||||
|
redeemTx.TxIn[0].SignatureScript = sigScript
|
||||||
|
return redeemTx, nil
|
||||||
|
}
|
||||||
|
|
||||||
// TestCalcPriority ensures the priority calculations work as intended.
|
// TestCalcPriority ensures the priority calculations work as intended.
|
||||||
func TestCalcPriority(t *testing.T) {
|
func TestCalcPriority(t *testing.T) {
|
||||||
// commonSourceTx1 is a valid transaction used in the tests below as an
|
// commonSourceTx1 is a valid transaction used in the tests below as an
|
||||||
@ -62,59 +120,20 @@ func TestCalcPriority(t *testing.T) {
|
|||||||
//
|
//
|
||||||
// From block 7 in main blockchain.
|
// From block 7 in main blockchain.
|
||||||
// tx 0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9
|
// tx 0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9
|
||||||
commonSourceTx1 := &wire.MsgTx{
|
commonSourceTx1, err := createTransaction(5000000000, nil, 0, hexToBytes("04ffff001d0134"))
|
||||||
Version: 1,
|
|
||||||
TxIn: []*wire.TxIn{{
|
if err != nil {
|
||||||
PreviousOutPoint: wire.OutPoint{
|
t.Errorf("Error with creating source tx: %v", err)
|
||||||
Hash: daghash.Hash{},
|
|
||||||
Index: wire.MaxPrevOutIndex,
|
|
||||||
},
|
|
||||||
SignatureScript: hexToBytes("04ffff001d0134"),
|
|
||||||
Sequence: math.MaxUint64,
|
|
||||||
}},
|
|
||||||
TxOut: []*wire.TxOut{{
|
|
||||||
Value: 5000000000,
|
|
||||||
PkScript: hexToBytes("410411db93e1dcdb8a016b49840f8c5" +
|
|
||||||
"3bc1eb68a382e97b1482ecad7b148a6909a5cb2e0ead" +
|
|
||||||
"dfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8" +
|
|
||||||
"643f656b412a3ac"),
|
|
||||||
}},
|
|
||||||
LockTime: 0,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// commonRedeemTx1 is a valid transaction used in the tests below as the
|
// commonRedeemTx1 is a valid transaction used in the tests below as the
|
||||||
// transaction to calculate the priority for.
|
// transaction to calculate the priority for.
|
||||||
//
|
//
|
||||||
// It originally came from block 170 in main blockchain.
|
// It originally came from block 170 in main blockchain.
|
||||||
commonRedeemTx1 := &wire.MsgTx{
|
commonRedeemTx1, err := createTransaction(5000000000, commonSourceTx1, 0, nil)
|
||||||
Version: 1,
|
|
||||||
TxIn: []*wire.TxIn{{
|
if err != nil {
|
||||||
PreviousOutPoint: wire.OutPoint{
|
t.Errorf("Error with creating redeem tx: %v", err)
|
||||||
Hash: *newHashFromStr("0437cd7f8525ceed232435" +
|
|
||||||
"9c2d0ba26006d92d856a9c20fa0241106ee5" +
|
|
||||||
"a597c9"),
|
|
||||||
Index: 0,
|
|
||||||
},
|
|
||||||
SignatureScript: hexToBytes("47304402204e45e16932b8af" +
|
|
||||||
"514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5f" +
|
|
||||||
"b8cd410220181522ec8eca07de4860a4acdd12909d83" +
|
|
||||||
"1cc56cbbac4622082221a8768d1d0901"),
|
|
||||||
Sequence: math.MaxUint64,
|
|
||||||
}},
|
|
||||||
TxOut: []*wire.TxOut{{
|
|
||||||
Value: 1000000000,
|
|
||||||
PkScript: hexToBytes("4104ae1a62fe09c5f51b13905f07f06" +
|
|
||||||
"b99a2f7159b2225f374cd378d71302fa28414e7aab37" +
|
|
||||||
"397f554a7df5f142c21c1b7303b8a0626f1baded5c72" +
|
|
||||||
"a704f7e6cd84cac"),
|
|
||||||
}, {
|
|
||||||
Value: 4000000000,
|
|
||||||
PkScript: hexToBytes("410411db93e1dcdb8a016b49840f8c5" +
|
|
||||||
"3bc1eb68a382e97b1482ecad7b148a6909a5cb2e0ead" +
|
|
||||||
"dfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8" +
|
|
||||||
"643f656b412a3ac"),
|
|
||||||
}},
|
|
||||||
LockTime: 0,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
@ -130,7 +149,7 @@ func TestCalcPriority(t *testing.T) {
|
|||||||
utxoView: newUtxoViewpoint([]*wire.MsgTx{commonSourceTx1},
|
utxoView: newUtxoViewpoint([]*wire.MsgTx{commonSourceTx1},
|
||||||
[]int32{7}),
|
[]int32{7}),
|
||||||
nextHeight: 169,
|
nextHeight: 169,
|
||||||
want: 5e9,
|
want: 1.5576923076923077e+10,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "one height 100 input, prio tx height 169",
|
name: "one height 100 input, prio tx height 169",
|
||||||
@ -138,7 +157,7 @@ func TestCalcPriority(t *testing.T) {
|
|||||||
utxoView: newUtxoViewpoint([]*wire.MsgTx{commonSourceTx1},
|
utxoView: newUtxoViewpoint([]*wire.MsgTx{commonSourceTx1},
|
||||||
[]int32{100}),
|
[]int32{100}),
|
||||||
nextHeight: 169,
|
nextHeight: 169,
|
||||||
want: 2129629629.6296296,
|
want: 6.634615384615385e+09,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "one height 7 input, prio tx height 100000",
|
name: "one height 7 input, prio tx height 100000",
|
||||||
@ -146,7 +165,7 @@ func TestCalcPriority(t *testing.T) {
|
|||||||
utxoView: newUtxoViewpoint([]*wire.MsgTx{commonSourceTx1},
|
utxoView: newUtxoViewpoint([]*wire.MsgTx{commonSourceTx1},
|
||||||
[]int32{7}),
|
[]int32{7}),
|
||||||
nextHeight: 100000,
|
nextHeight: 100000,
|
||||||
want: 3086203703703.7036,
|
want: 9.61471153846154e+12,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "one height 100 input, prio tx height 100000",
|
name: "one height 100 input, prio tx height 100000",
|
||||||
@ -154,7 +173,7 @@ func TestCalcPriority(t *testing.T) {
|
|||||||
utxoView: newUtxoViewpoint([]*wire.MsgTx{commonSourceTx1},
|
utxoView: newUtxoViewpoint([]*wire.MsgTx{commonSourceTx1},
|
||||||
[]int32{100}),
|
[]int32{100}),
|
||||||
nextHeight: 100000,
|
nextHeight: 100000,
|
||||||
want: 3083333333333.3335,
|
want: 9.60576923076923e+12,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,3 +186,11 @@ func TestCalcPriority(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var privKeyBytes, _ = hex.DecodeString("22a47fa09a223f2aa079edf85a7c2" +
|
||||||
|
"d4f8720ee63e502ee2869afab7de234b80c")
|
||||||
|
|
||||||
|
var privKey, pubKey = btcec.PrivKeyFromBytes(btcec.S256(), privKeyBytes)
|
||||||
|
var pubKeyHash = btcutil.Hash160(pubKey.SerializeCompressed())
|
||||||
|
var addr, err = btcutil.NewAddressPubKeyHash(pubKeyHash,
|
||||||
|
&dagconfig.MainNetParams)
|
||||||
|
@ -741,7 +741,7 @@ func createTxRawResult(chainParams *dagconfig.Params, mtx *wire.MsgTx,
|
|||||||
|
|
||||||
if blkHeader != nil {
|
if blkHeader != nil {
|
||||||
// This is not a typo, they are identical in bitcoind as well.
|
// This is not a typo, they are identical in bitcoind as well.
|
||||||
txReply.Time = blkHeader.Timestamp.Unix()
|
txReply.Time = uint64(blkHeader.Timestamp.Unix())
|
||||||
txReply.Blocktime = uint64(blkHeader.Timestamp.Unix())
|
txReply.Blocktime = uint64(blkHeader.Timestamp.Unix())
|
||||||
txReply.BlockHash = blkHash
|
txReply.BlockHash = blkHash
|
||||||
txReply.Confirmations = uint64(1 + chainHeight - blkHeight)
|
txReply.Confirmations = uint64(1 + chainHeight - blkHeight)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user