示例#1
0
bool deser_msg_getblocks(struct msg_getblocks *gb, struct const_buffer *buf)
{
	msg_getblocks_free(gb);

	if (!deser_bp_locator(&gb->locator, buf)) return false;
	if (!deser_u256(&gb->hash_stop, buf)) return false;
	return true;
}
示例#2
0
文件: tx.c 项目: afk11/libbtc
btc_bool btc_tx_in_deserialize(btc_tx_in* tx_in, struct const_buffer* buf)
{
    deser_u256(tx_in->prevout.hash, buf);
    if (!deser_u32(&tx_in->prevout.n, buf))
        return false;
    if (!deser_varstr(&tx_in->script_sig, buf))
        return false;
    if (!deser_u32(&tx_in->sequence, buf))
        return false;
    return true;
}
示例#3
0
文件: blkdb.c 项目: hsk81/picocoin
static bool blkdb_read_rec(struct blkdb *db, const struct p2p_message *msg)
{
	struct blkinfo *bi;
	struct const_buffer buf = { msg->data, msg->hdr.data_len };

	if (strncmp(msg->hdr.command, "rec", 12))
		return false;

	bi = bi_new();
	if (!bi)
		return false;

	/* deserialize record */
	if (!deser_u256(&bi->hash, &buf))
		goto err_out;
	if (!deser_bp_block(&bi->hdr, &buf))
		goto err_out;

	/* verify that provided hash matches block header, as an additional
	 * self-verification step
	 */
	bp_block_calc_sha256(&bi->hdr);
	if (!bu256_equal(&bi->hash, &bi->hdr.sha256))
		goto err_out;

	/* verify block may be added to chain, then add it */
	struct blkdb_reorg dummy;
	if (!blkdb_connect(db, bi, &dummy))
		goto err_out;

	return true;

err_out:
	bi_free(bi);
	return false;
}