Example #1
0
	def serialize(self):
		"""
		Serializes the MultiSigTransaction.

		Return value:
		str; the serialized MultiSigTransaction.
		"""

		serializedList = tcd.serializeList(self.TCDlist)
		return struct.pack('!I', len(serializedList)) + \
			serializedList + self.transaction.serialize()
Example #2
0
	def setOutputs(self, ownPubKey, peerPubKey, escrowPubKey,
		ownAmount, peerAmount):
		"""
		Re-write the outputs of the transaction, based on the TCDlist attribute
		and the given arguments.

		Arguments:
		ownPubKey: str; our own public key.
		peerPubKey: str; the public key of the peer.
		escrowPubKey: str; the public key of the escrow service.
		ownAmount: int; the non-locked funds available to ourselves (in Satoshi).
		peerAmount: int; the non-locked funds available to the peer (in Satoshi).
		"""

		ownKeyHash = RIPEMD160(SHA256(ownPubKey))
		peerKeyHash = RIPEMD160(SHA256(peerPubKey))

		lockedAmount = sum([doc.amount for doc in self.TCDlist])

		self.transaction.tx_out = []

		if len(self.TCDlist) > 0:
			serializedList = tcd.serializeList(self.TCDlist)
			hashValue = RIPEMD160(SHA256(serializedList))
			self.transaction.tx_out.append(bitcointransaction.TxOut(
				0, #Don't send any funds here: they're unspendable.
				bitcointransaction.Script.dataPubKey(hashValue)
				))

		if ownAmount > 0:
			self.transaction.tx_out.append(bitcointransaction.TxOut(
				ownAmount,
				bitcointransaction.Script.standardPubKey(ownKeyHash)
				))

		if peerAmount > 0:
			self.transaction.tx_out.append(bitcointransaction.TxOut(
				peerAmount,
				bitcointransaction.Script.standardPubKey(peerKeyHash)
				))

		if lockedAmount > 0:
			self.transaction.tx_out.append(bitcointransaction.TxOut(
				lockedAmount,
				bitcointransaction.Script.multiSigPubKey(
					[ownPubKey, peerPubKey, escrowPubKey])
				))
Example #3
0
	def getState(self, forDisplay=False):
		"""
		Return a data structure that contains state information of the
		MultiSigTransaction.

		Arguments:
		forDisplay: bool; indicates whether the returned state is for user
		            interface display purposes (True) or for state saving
		            purposes (False). For user interface display purposes, a
		            summary may be returned instead of the complete state.

		Return value:
		A data structure, consisting of only standard Python types like dict,
		list, str, bool, int.
		"""

		ret = {}
		if forDisplay:
			ret["ID"] = self.transaction.getTransactionID()[::-1].encode("hex")
		else:
			ret["tx"] = self.transaction.serialize().encode("hex")
			ret["TCDs"] = tcd.serializeList(self.TCDlist).encode("hex")
		return ret