示例#1
0
func makeValidTxnNoError(t *testing.T, mv *visor.Visor) coin.Transaction {
	we := wallet.NewWalletEntry()
	tx, err := mv.Spend(mv.Wallets[0].GetID(), visor.Balance{10 * 1e6, 0}, 0,
		we.Address)
	assert.Nil(t, err)
	return tx
}
示例#2
0
// Transfers all the coins and hours in genesis block to an address
func transferAllToAddress(v *visor.Visor, gb visor.SignedBlock,
	dest coin.Address) (visor.SignedBlock, error) {
	sb := visor.SignedBlock{}
	if gb.Block.Head.BkSeq != uint64(0) {
		return sb, errors.New("Must be genesis block")
	}
	// Send the entire genesis block to dest
	if len(gb.Block.Body.Transactions) != 1 {
		log.Panic("Genesis block has only 1 txn")
	}
	tx := gb.Block.Body.Transactions[0]
	if len(tx.Out) != 1 {
		log.Panic("Genesis block has only 1 output")
	}
	amt := visor.NewBalance(tx.Out[0].Coins, tx.Out[0].Hours)
	tx, err := v.Spend(amt, 0, dest)
	if err != nil {
		return sb, err
	}
	// Add the tx to the unconfirmed pool so it can get picked up
	err, _ = v.RecordTxn(tx)
	if err != nil {
		return sb, err
	}
	// Put the tx in a block and commit
	sb, err = v.CreateBlock(gb.Block.Head.Time + 1)
	if err != nil {
		return sb, err
	}
	err = v.ExecuteSignedBlock(sb)
	if err != nil {
		return sb, err
	}
	return sb, nil
}
示例#3
0
//modify to return error
// NOT WORKING
// actually uses visor
func (self *WalletRPC) GetWalletBalance(v *visor.Visor,
	walletID wallet.WalletID) (wallet.BalancePair, error) {

	wlt := self.Wallets.Get(walletID)
	if wlt == nil {
		log.Printf("GetWalletBalance: ID NOT FOUND: id= %s", walletID)
		return wallet.BalancePair{}, errors.New("Id not found")
	}
	auxs := v.Blockchain.Unspent.AllForAddresses(wlt.GetAddresses())
	puxs := v.Unconfirmed.SpendsForAddresses(&v.Blockchain.Unspent,
		wlt.GetAddressSet())

	coins1, hours1 := v.AddressBalance(auxs)
	coins2, hours2 := v.AddressBalance(auxs.Sub(puxs))

	confirmed := wallet.Balance{coins1, hours1}
	predicted := wallet.Balance{coins2, hours2}

	return wallet.BalancePair{confirmed, predicted}, nil
}
示例#4
0
func transferCoins(mv *visor.Visor, v *visor.Visor) error {
	// Give the nonmaster some money to spend
	addr := v.Wallet.GetAddresses()[0]
	tx, err := mv.Spend(visor.Balance{10 * 1e6, 0}, 0, addr)
	if err != nil {
		return err
	}
	mv.RecordTxn(tx)
	sb, err := mv.CreateAndExecuteBlock()
	if err != nil {
		return err
	}
	return v.ExecuteSignedBlock(sb)
}
示例#5
0
func makeMoreBlocks(mv *visor.Visor, n int,
	now uint64) ([]visor.SignedBlock, error) {
	dest := visor.NewWalletEntry()
	blocks := make([]visor.SignedBlock, n)
	for i := 0; i < n; i++ {
		tx, err := mv.Spend(visor.Balance{10 * 1e6, 0}, 0, dest.Address)
		if err != nil {
			return nil, err
		}
		mv.RecordTxn(tx)
		sb, err := mv.CreateBlock(now + uint64(i) + 1)
		if err != nil {
			return nil, err
		}
		err = mv.ExecuteSignedBlock(sb)
		if err != nil {
			return nil, err
		}
		blocks[i] = sb
	}
	return blocks, nil
}
示例#6
0
func makeValidTxn(mv *visor.Visor) (coin.Transaction, error) {
	we := visor.NewWalletEntry()
	return mv.Spend(visor.Balance{10 * 1e6, 0}, 0, we.Address)
}
示例#7
0
func makeValidTxn(mv *visor.Visor) (coin.Transaction, error) {
	we := wallet.NewWalletEntry()
	return mv.Spend(mv.Wallets[0].GetID(), wallet.Balance{10 * 1e6, 0}, 0,
		we.Address)
}