Transaction structure data points
This is the structure of a single coin. The ‘ID’ and ‘Default Value’ make up a dictionary as the structure of a coin i.e {‘ID’: Default Value}:
ID: coin_head_id
Default Value: ’00’
Datatype: string
Description: The unique id of a coin. The beginning of a bundle note.
ID: receiver_address
Default Value: ’00’
Datatype: string
Description: The transaction receiving address (the owner of a coin).
ID: sender_address
Default Value: ’00’
Datatype: string
Description: The transaction sending address.
ID: send_timestamp
Default Value: ‘19990101235959999999’
Datatype: string
Description: The time of the transaction of the coin.
ID: entry_node
Default Value: ‘MDA= ‘
Datatype: string
Description: The entry node for the current transaction.
ID: signature
Default Value: ’00’
Datatype: string
Description: The signed selected values of the coin to ensure they can never be altered. Those values include all data points except the previous sequential_hash and signature
ID: sequential_hash
Default Value: ’f1534392279bddbf9d43dde8701cb5be14b82f76ec6607bf8d6ad557f60f304e’
Datatype: string
Description: The moving hash of an address keeping track of the path of its coins since inception. It is a hash therefore you cannot find out the actual path, but it lets you know that the path is correct if you already have the order.
ID: sender_cluster_template_hash
Default Value: ’00’
Datatype: string
Description: The hash of the current full readable cluster.
ID: packet_id
Default Value: ’00’
Datatype: string
Description: The unique identification of a group of coins for the transaction.
ID: packet_balance
Default Value: 0
Datatype: float
Description: The total amount of all notes in the packet for all transaction types, excluding the change.
ID: note_balance
Default Value: 0
Datatype: float
Description: The balance amount contained in a single note.
ID: transaction_type_balance
Default Value: 0
Datatype: float
Description: The balance amount contained in all notes that make up a transaction type e.g. a fee may have multiple notes in a packet, but their total would be contained in this balance for that specific packet.
ID: staking_burn_ratio
Default Value: 1
Datatype: integer
Description: The ratio at which a node accepts staking burn ratios. e.g. a 2 represents a 1:2 ratio meaning the guarantor node will burn off x2 of the packet balance amount received if it deletes the received packet in a double spend attempt. Range from 0 to 2.
ID: transaction_type
Default Value: ’0’
Datatype: string
Description: The descriptor for the type of transaction which is being performed on a coin.
0: change - change of sender.
1: peer_to_peer - transaction to other party.
2: fee - transaction to the entry node.
3: reward - granted by the system for performing the close of day tasks.
5: nugget - an amount equal to 0.0001 (smallest possible unit) sent to the parent node.
6: cluster_cod_fee - the amount a contract pays for resources used to be included in the groupby calculation to save their contract state.
4: cluster_cod_fee_on_behalf - cod stands for close_of_day, this is the same as the cluster_cod_fee below except that this is a transaction on behalf of a cluster in case a cluster has a lost private key therefore unable to make the transaction. This feature is also available as cluster key holders may decide to not pay their fee if change management does not go their way in an attempt to prevent a change management count. With this feature anyone can pay on behalf of a cluster should they suspect such an attempt.
7: block_report_proof_ind - an indicator showing a report for a deletion of a signed packet. Linked to block_report_proof. It is used for easily referencing those transactions that were deleted. E.g. the staking contract uses this.
8: burnable_stake - sent by nodes, these are the coins that make up the staking pool that the nodes lock up to be claimed from by any sender who sends a packet using a guard. Any packet with a staking_burn_ratio which has been deleted by an entry parent node while signed by it can claim from this pool from the node’s capacity or the guards’ capacity. The locking is done via network_limit_unlock_date_id. Even if the coin is locked it can still be burnt if this transaction type is selected.
ID: initial_join_date_id
Default Value: ’19990101’
Datatype: string
Description: The first ever date the address transacted.
ID: next_transaction_node
Default Value: ’MDA=’
Datatype: string
Description: The encoded entry node for the next future transaction. Used to notify the network which node the sender will pay through next. This is useful if you are changing to another node. This is very important as the network only accepts packets sent through the node stated here.
ID: recipient_transaction_node
Default Value: ’MDA=’
Datatype: string
Description: An optional field where the sender can specify the destination node so as to speed up the notification to the recipient. The network can find the destination without having to specify this option. This data point is also used to fund stake capacities in relation to transaction_type ‘8’
ID: intended_destination_address
Default Value: ’00’
Datatype: string
Description: Address of the node or pool on whose behalf the transaction to the staking contract will be made. A node may have a separate contract that pays out interest to people who stake on its behalf. This data point allows anyone to lock up their amount towards that specific node’s capacity total value. The risk is that if the node is malicious then it would lose some of its capacity value which could be the users locked up amount. The benefit would be the interest paid out by the node if it is not malicious. Therefore, choose carefully. This way you control custody of your funds by staking on behalf of a node or pool without having to send to their address in order for them to stake it directly themselves and hopefully send you your funds back.
ID: app_version_no
Default Value: ’00’
Datatype: string
Description: The version of the NOD engine that sent the transaction.
ID: active_duration_persistence
Default Value: 0
Datatype: integer
Description: Consecutive number of months that an address has kept active status. Keeps track of the very last time a transaction was made on an address if transacted every month because Kujua currently only supports monthly debt collection. It does this by resetting the value to 0 if an address does not transact in a month.
ID: network_limit_unlock_date_id
Default Value: ’19990101’
Datatype: string
Description: Used to set address limits, states when those limits can expire.
ID: network_coin_id_unlock_date_id
Default Value: ’19990101’
Datatype: string
Description: Locks coinid’s from any movement until the expiration date is reached. Kujua coins have specific ids and this option allows one to lock away some based on their id’s. A Developer would need to separate such coins from being part of the available balance of an address. Can be used as extra security in case the private key is compromised but typically used to stake coins in combination with transaction_type ‘8'.
ID: replacement_coin_id
Default Value: ’00’
Datatype: string
Description: A coin id that links the previous transaction to the current transaction (for system use). It replaces the old coin range of ids.
ID: replacement_coin_datetime_id
Default Value: ’19990101235959999999’
Datatype: string
Description: The date_id related to the replacement_coin_id (for system use)
ID: packet_transactions_count
Default Value: 0
Datatype: integer
Description: The number of transactions in a packet.
ID: packet_range_start_id
Default Value: ’00’
Datatype: string
Description: Indicates the first coin_id in a packet. It is used to group all coins in a single packet together.
ID: previous_coin_id
Default Value: ’00’
Datatype: string
Description: This is how the network knows the most recent metadata of the sender address by looking up the previous coin.
ID: previous_coin_time_id
Default Value: ’19990101235959999999’
Datatype: string
Description: Time linked to previous_coin_id.
ID: total_outgoing_balance
Default Value: 0
Datatype: float
Description: Address total outgoing transaction balance since inception.
ID: total_outgoing_transactions_count
Default Value: 0
Datatype: integer
Description: Address total count of transactions since inception.
ID: daily_address_outgoing_balance
Default Value: 0
Datatype: float
Description: Address total outgoing transaction balance for the day 00:00:00 to 23:59:59 UTC.
ID: daily_address_limit
Default Value: 0
Datatype: float
Description: Limits how much money can be transacted out of an address for a specified period of time. The limit resets daily. Used to protect against situations where a private key has been compromised.
ID: daily_address_limit_exit_address
Default Value: ’00’
Datatype: string
Description: This optional exit address is the only address that would not adhere to the set daily_address_limit, thereby allowing a 100% or lower transfer out of the address even before the limit expires.
ID: recipient_reference
Default Value: ’00’
Datatype: string
Description: The entered chosen reference for the recipient. Publicly viewable, not for sensitive information.
ID: recipient_address_type
Default Value: ’00’
Datatype: string
Description:
0x: ‘standard’
sx: ‘contract’
bx: binded contract
cx: cluster
ID: cluster_cod_fee_date_id
Default Value: ’19990101’
Datatype: string
Description: The date the cluster monthly fee was last paid, which is a fee that each cluster pays per day to the seven nodes that find consensus first at close of day (the randomised hierarchical nodes). This fee is rewarded equally to the nodes that found consensus first and also rewards the parent node per close of day. It is paid as a transaction_type of type ‘6’ cluster_cod_fee which is then distributed to those nodes. The reason for this fee is because the close of day calculations consume a lot of CPU as all nodes have to make this calculation to find consensus.
ID: previous_contract_coin_id
Default Value: ’00’
Datatype: string
Description: This is how the network knows the most recent metadata of the sender address by looking up the previous coin to the contract.
ID: previous_contract_coin_date_id
Default Value: ’19990101235959999999’
Datatype: string
Description: Time linked to previous_coin_id for the contract transaction.
ID: cluster_transaction_type
Default Value: ’00’
Datatype: string
Description:
00: non-cluster interaction.
0: normal cluster interaction.
1: subscription.
2: proof of monthly interaction. All addresses that are subscribed to a cluster are required to prove that they have interacted with all their clusters at least once a month, making them binding, in such cases a type 2 would be sent and the sender_template_readable_obj would be sent to the network. If the transaction is to subscribe to a cluster, a type 1 is sent. By default, a type 0 is sent which means one is simply interacting with a cluster to trigger an event.
3: cluster creation.
4: term_creation.
5: standard contract creation.
6: binded contract creation.
ID: sender_template_readable_obj
Default Value: {}
Datatype: dictionary
Description: In hex format. This is the proof used when subscribing to a new cluster (cluster_transaction_type with type 1, the current full readable state is sent) or when proving that you transacted with a cluster at least once a cycle (currently monthly) (cluster_transaction_type with type 2, the full readable state is sent). Otherwise, when interacting with cluster_transaction_type with type 0 which is a normal interaction with a cluster then only the specific cluster readable state is sent, not the full readable state. This is how the network knows the sender did not remove a subscription upon subscribing another or interacting with the blockchain. This will produce the cluster_hash. NB: This field is set to the default value if an address is not interacting with a cluster.
ID: contract_args (experimental)
Default Value: ()
Datatype: tuple
Description: In hex format. These are the arguments that may interact with a contract.
ID: cluster_proof_indicator_date_id
Default Value: ’19990101’
Datatype: string
Description: The indicator that allows the network to know that proof of interaction for cluster_transaction_type 2 to all clusters has been paid for the month. This prevents the sender from having to show proof in every transaction. Format is ‘YYMM01’, the ’01’ is there for future usage in case we want to track per day rather than per month.
ID: cluster_cod_fee_on_behalf_address
Default Value: ’00’
Datatype: string
Description: Address on whose behalf the cluster_cod_fee was paid. Linked using transaction_type ’4’
ID: block_report_proof
Default Value: {}
Datatype: dictionary
Description: Used for reporting a sequential position deletion to notify the network to block a corrupt node if it deletes a transaction from its ledger. Linked to transaction_type ‘7’
format: {‘initial_packet_signature_items’: [signature, packet_hash, send_timestamp, entry_time, entry_sequential_pos, receiver_address, sender_address, transaction_type_balance, packet_transactions_count, staking_burn_ratio], ‘followup_signature_items’: [signature, packet_hash, send_timestamp, entry_time, entry_sequential_pos, receiver_address, sender_address, transaction_type_balance, packet_transactions_count, staking_burn_ratio], ‘malicious_entry_node_encoded’: ‘’}
ID: free_text
Default Value: {}
Datatype: dictionary
Description: This data point can be used in smart contracts to send any type and length of data over the network. Please note that sending resource intensive data may deter nodes from executing your contract.
ID: coin_tail_id
Default Value: ’00’
Datatype: string
Description: The last coin of a bundle note
Cluster data points API parameter definitions.
A cluster is created using a dictionary with the following parameters:
ID: terms
Default Value: []
Datatype: list
Description: List of term contracts attached to the cluster. Blockchain defined, do not change.
ID: binded_contracts
Default Value: []
Datatype: list
Description: List of binded contracts attached to this cluster. Blockchain defined, do not change.
ID: initialisation_date_id
Default Value: ‘19990101’
Datatype: list
Description: The first date the blockchain received this cluster.
ID: enforced_duration
Default Value: 0
Datatype: integer
Description: The number of days in which this contract should be enforced before expiring per subscription. e.g. 365 means it will be enforced for 365 days from when a member subscribes.
ID: enforcement_cycle
Default Value: 0
Datatype: integer
Description: A period when this cluster triggers to enforce adherence to the binded contracts and terms attached. Kujua currently only supports a 30-day monthly collection cycle, meaning it only holds people accountable to pay their clusters no less than 30 days therefore create your contracts with that in mind.
ID: monthly_min_amount
Default Value: 0
Datatype: float
Description: An amount to collect per cycle specified in enforcement_cycle if the cluster is a funding collection type of subscription else leave default value.
ID: monthly_min_percentage
Default Value: 0
Datatype: float
Description: A percentage that cluster members agreed upon to collect. Percentage is based on the formula provided in monthly_min_percentage_calc. It is recommended to leave monthly_min_amount or monthly_min_percentage as 0 else both will be charged. NB: clusters that use a percentage to collect funds are not allowed to have a duration of more than 180 days, this means members will need to renew their subscription every 180 days (6 months), so as to protect users from signing up to a variable rate that might change in the short or long term as the formula is open to any sort of calculation.
ID: monthly_min_percentage_desc
Default Value: ‘’
Datatype: string
Description: The written short and concise description of how the monthly_min_percentage is calculated. Limited to 300 characters e.g. 'sum of total monthly outgoing amount'.
ID: monthly_min_percentage_calc
Default Value: ‘’
Datatype: string
Description: The formula used to calculate monthly_min_percentage. Use data point values either from the Core data points or your own data points in the contract state. Note that the formula added here should be valid and executable else the cluster execution may fail altogether.
ID: cumulative_monthly_amount
Default Value: 0
Datatype: float
Description: Tracks all amounts paid to the cluster per subscription.
ID: poll_threshold
Default Value: 70
Datatype: integer
Description: The percentage of poll counts of total qualifying members that is required to introduce new changes to a cluster.
ID: poll_date_cycle
Default Value: 30
Datatype: integer
Description: Period when the polls get counted. **See string date cycle guidelines.
ID: poll_activation_population
Default Value: 0
Datatype: integer
Description: The number of members required before any type of change management is activated. CVI and non-CVI.
ID: poll_membership_duration
Default Value: 0
Datatype: integer
Description: This is the length of time in days a member has to surpass to be able to participate in polls.
ID: poll_member_active_duration
Default Value: 0
Datatype: integer
Description: How long a member has to be an active member before they can participate in polls. This value resets if a cycle passed without a transaction received. Different to the Core 'active_duration_persistence'.
ID: cvi_poll_type
Default Value: 1
Datatype: integer
Description: One of 1 or 2. Type 1 clusters require members to choose cvi_verifier_addresses below and only require CVI if the cvi_threshold below is met, until then all qualified members can participate in polls. Type 2 clusters require CVI and allows you to set the cvi_verifier_addresses below at cluster creation allowing only the creator to control who can grant CVI.
ID: cvi_verifier_addresses
Default Value: []
Datatype: list
Description: This will be enforced if you choose cvi_poll_type type 2 else the blockchain will handle the selection through change management.
ID: cvi_threshold
Default Value: 0
Datatype: integer
Description: A number of members to reach before CVI can be activated.
ID: cvi_dissolve_threshold
Default Value: 0
Datatype: integer
Description: A percentage of poll counts of total CVI members required before CVI can be deactivated.
ID: cvi_dissolve_poll_date_id
Default Value: ‘19990101’
Datatype: string
Description: The date that a member participates to dissolve CVI. Used to count poll counts within a period cycle.
ID: cvi_addresses_recalc_cycle
Default Value: '00--00--00'
Datatype: string
Description: The cycle when to recalculate the cvi_verifier_addresses. **See string date cycle guidelines.
ID: cvi_signature_expiration_cycle
Default Value: '00--00--00'
Datatype: string
Description: The cycle when to expire CVI signatures for cluster members. Everyones signatures expire after a specified period standardised across all members. **See string date cycle guidelines.
ID: cvi_signatures
Default Value: []
Datatype: list
Description: A members signatures given to them for CVI, format is [uid_signature_date_id,uid,uid_signature_expiration_date_id,uid_signature1, uid_signature2,uid_signature3,uid_signature4,uid_signature5, uid_signature6,uid_signature7]
ID: cvi_address_poll
Default Value: ‘’
Datatype: string
Description: A members vote for who should be granted authority to grant CVI to members. An address / public key.
ID: changes_poll_hash
Default Value: ‘’
Datatype: string
Description: A hash format of the changes being made to a cluster which the member wishes to be introduced to the cluster.
ID: changes_poll_date_id
Default Value: '19990101'
Datatype: string
Description: The date the member pushes in their changes_poll_hash.
ID: original_send_timestamp
Default Value: '19990101235959999999'
Datatype: string
Description: The date the member originally interacts with the cluster.
ID: moving_send_timestamp
Default Value: '19990101235959999999'
Datatype: string
Description: The last date the member interacts with the cluster.
** string date cycle guidelines:
Should follow format '00--00--00--00--00--00'. “yearly rounds -- day of the month -- month1 -- month2 -- month3 -- month4” e.g. 01--30--01--02--03--12 (every year on the 30th of the month in January, February, March and December). To disable a month for contracts were you wish to only allow poll counting say once a year, you add ’00’ for those months e.g. 04--30--01--00--00--00 means every 4 years on the 30th of the month in January.
Collection cycle year maximum is 4 years for cvi_poll_cycle and 99 years for all other date cycles.
Collection cycle day maximum value is 30.
If February is a collection date, then other selected months cannot collect with a day higher than day 28.
'00--00--00' means disabled.