A computer-implemented method (300, 500) performed by a consensus node of a blockchain network, comprising: receiving (320, 502), from a first account, a digitally signed copy of a plurality of note identifiers, IDs, identifying a corresponding plurality of notes associated with the first account, a commitment of a transaction amount of a transaction between the first account and a second account paid by at least a portion of the plurality of notes, a commitment of a change from deducting the transaction amount from a total value of the plurality of notes, a first random number used to generate the commitment of the transaction amount encrypted by a public key of the second account, the transaction amount encrypted by the public key of the second account, a second random number used to generate (312, 314, 316) the commitment of the change encrypted by the public key of the first account, the change encrypted by the public key of the first account, one or more range proofs, and a zero-knowledge proof generated based on one or more selected random numbers; verifying (322, 504) a digital signature corresponding to the digitally signed copy using the public key of the first account; determining (328, 506) that the one or more range proofs prove that the transaction amount and the change are greater than, or equal to, zero; determining (326, 508) that the total value of the plurality of notes equals the sum of the transaction amount and the change; determining whether the transaction amount in the commitment is the same as the transaction amount that is encrypted, and whether a random number used to generate the commitment of the transaction amount is the same as the first random number; and updating (334, 512) the first account and the second account based on the plurality of notes, the transaction amount, and the change, if the transaction amount in the commitment is the same as the transaction amount that is encrypted and if the random number used to generate the commitment of the transaction amount is the same as the first random number. receiving (320, 502), from a first account, a digitally signed copy of a plurality of note identifiers, IDs, identifying a corresponding plurality of notes associated with the first account, a commitment of a transaction amount of a transaction between the first account and a second account paid by at least a portion of the plurality of notes, a commitment of a change from deducting the transaction amount from a total value of the plurality of notes, a first random number used to generate the commitment of the transaction amount encrypted by a public key of the second account, the transaction amount encrypted by the public key of the second account, a second random number used to generate (312, 314, 316) the commitment of the change encrypted by the public key of the first account, the change encrypted by the public key of the first account, one or more range proofs, and a zero-knowledge proof generated based on one or more selected random numbers; verifying (322, 504) a digital signature corresponding to the digitally signed copy using the public key of the first account; determining (328, 506) that the one or more range proofs prove that the transaction amount and the change are greater than, or equal to, zero; determining (326, 508) that the total value of the plurality of notes equals the sum of the transaction amount and the change; determining whether the transaction amount in the commitment is the same as the transaction amount that is encrypted, and whether a random number used to generate the commitment of the transaction amount is the same as the first random number; and updating (334, 512) the first account and the second account based on the plurality of notes, the transaction amount, and the change, if the transaction amount in the commitment is the same as the transaction amount that is encrypted and if the random number used to generate the commitment of the transaction amount is the same as the first random number.