Example #1
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
}
Example #2
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)
}
Example #3
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
}