# Quantum money

## Implementing the currency of the future

“Quantum money” refers to a theoretical system of currency that utilizes principles of quantum mechanics to create banknotes that are impossible to counterfeit. The concept was first introduced in the 1970s by physicist Stephen Wiesner under the name “quantmoney.” The basic idea is that each quantum banknote would have a set of quantum states that serve as its unique serial number. Due to the fundamental properties of quantum mechanics, specifically the no-cloning theorem, it would be impossible to make an exact copy of a quantum state without knowing how it was prepared.

In practical terms, if someone tried to counterfeit a quantum banknote, any attempt to measure and reproduce its quantum states would disturb those states, thereby making the counterfeiting evident.

While the concept is intriguing and offers a potentially revolutionary way to secure currency against forgery, the implementation of quantum money on a large scale requires overcoming numerous technological challenges. As of today, quantum money remains largely a theoretical construct.

Implementing a demonstration of quantum money using Amazon Braket would involve simulating a basic quantum money scheme. Here’s a simple approach using a single qubit quantum money scheme:

**0. Initial Import and Endpoint:** The local simulator allows to run this in a local environment without the need to have an AWS account.

`import numpy as np`

from braket.circuits import Circuit

from braket.devices import LocalSimulator

# Initialize the local simulator

device = LocalSimulator()

**1. Preparation of Quantum Money:** Choose a random qubit state as the “serial number” for our quantum money. This will be a secret and only known to the “mint” (the entity creating the money).

`# 1. Preparation of Quantum Money`

# For this demo, let's use the |+⟩ state as our "secret" state

# (a 45 degree rotation around Y axis)

money_circuit = Circuit().ry(0, np.pi/4)

# Run the circuit to prepare our quantum money

result = device.run(money_circuit, shots=1).result()

print(result.measurement_counts)

**2. Verification: **To verify the authenticity of a quantum banknote, the mint measures the qubit in the same basis in which it was prepared. If it’s genuine, the measurement will yield the expected outcome with high probability.

`# 2. Verification`

# To verify, measure in the X basis

# (since |+⟩ and |-⟩ are eigenstates of the X operator)

verification_circuit = money_circuit.measure(0)

result = device.run(verification_circuit, shots=1).result()

print(result.measurement_counts)

When verifying, we measure the qubit in the basis where |+⟩ and |-⟩ are eigenstates (the X basis). In an ideal scenario, the measurement should return `1`

(corresponding to |+⟩) with high probability.

**3. Attempt to Copy:** Due to the no-cloning theorem, making an exact copy of the quantum banknote without knowing the preparation basis is impossible.

`# 3. Attempt to Copy`

# If someone tries to clone the banknote without knowing it's the |+⟩ state,

# they might incorrectly measure in the Z basis, leading to a 50% error.

copy_attempt_circuit = money_circuit.measure(0)

result = device.run(copy_attempt_circuit, shots=1).result()

print(result.measurement_counts)

If someone tries to clone the banknote without knowing its state, they might measure in a different basis, such as the Z basis. This could result in a 50/50 chance of getting `0`

or `1`

, indicating a failure to copy the state accurately.

This is a highly simplified demonstration. In a practical quantum money scheme, multiple qubits and more complex states would be used. But this code gives a basic idea of how quantum money could be represented and how the no-cloning theorem prevents copying the quantum state.