
Inquantum computing and specifically thequantum circuitmodel of computation, aquantum logic gate (or simplyquantum gate) is a basic quantum circuit operating on a small number ofqubits. Quantum logic gates are the building blocks of quantum circuits, like classicallogic gates are for conventional digital circuits.
Unlike many classical logic gates, quantum logic gates arereversible. It is possible to perform classical computing using only reversible gates. For example, the reversibleToffoli gate can implement allBoolean functions, often at the cost of having to useancilla bits. The Toffoli gate has a direct quantum equivalent, showing that quantum circuits can perform all operations performed by classical circuits.
Quantum gates areunitary operators, and are described asunitary matrices relative to someorthonormalbasis. Usually thecomputational basis is used, which unless comparing it with something, just means that for ad-level quantum system (such as aqubit, aquantum register, orqutrits andqudits)[1]: 22–23 theorthonormal basisvectors are labeled, or usebinary notation.
The current notation for quantum gates was developed by many of the founders ofquantum information science including Adriano Barenco,Charles Bennett,Richard Cleve,David P. DiVincenzo,Norman Margolus,Peter Shor, Tycho Sleator,John A. Smolin, and Harald Weinfurter,[2] building on notation introduced byRichard Feynman in 1986.[3]

Quantum logic gates are represented byunitary matrices. A gate that acts onqubits (aregister) is represented by a unitary matrix, and theset of all such gates with the group operation ofmatrix multiplication[a] is theunitary group U(2n).[2] Thequantum states that the gates act upon areunit vectors incomplex dimensions, with thecomplex Euclidean norm (the2-norm).[4]: 66 [5]: 56, 65 Thebasis vectors (sometimes calledeigenstates) are the possible outcomes if the state of the qubits ismeasured, and a quantum state is alinear combination of these outcomes. The most common quantum gates operate onvector spaces of one or two qubits, just like the commonclassical logic gates operate on one or twobits.
Even though the quantum logic gates belong tocontinuous symmetry groups, realhardware is inexact and thus limited in precision. The application of gates typically introduces errors, and thequantum states' fidelities decrease over time. Iferror correction is used, the usable gates are further restricted to a finite set.[4]: ch. 10 [1]: ch. 14 Later in this article, this is ignored as the focus is on the ideal quantum gates' properties.
Quantum states are typically represented by "kets", from a notation known asbra–ket.
The vector representation of a singlequbit is
Here, and are the complexprobability amplitudes of the qubit. These values determine the probability of measuring a 0 or a 1, when measuring the state of the qubit. Seemeasurement below for details.
The value zero is represented by the ket, and the value one is represented by the ket.
Thetensor product (orKronecker product) is used to combine quantum states. The combined state for aqubit register is the tensor product of the constituent qubits. The tensor product is denoted by the symbol.
The vector representation of two qubits is:[6]
The action of the gate on a specific quantum state is found bymultiplying the vector, which represents the state by the matrix representing the gate. The result is a new quantum state:
TheSchrödinger equation describes how quantum systems that are notobserved evolve over time, and is When the system is in a stable environment, so it has a constantHamiltonian, the solution to this equation is[1]: 24–25 If the time is always the same it may be omitted for simplicity, and the way quantum states evolve can be described as just as in the above section.
That is, a quantum gate is how a quantum system that is not observed evolves over some specific time, or equivalently, a gate is the unitarytime evolution operator acting on a quantum state for a specific duration.
There exists anuncountably infinite number of gates. Some of them have been named by various authors,[1][2][4][5][7][8][9] and below follow some of those most often used in the literature.
The identity gate is theidentity matrix, usually written asI, and is defined for a single qubit as
whereI is basis independent and does not modify the quantum state. The identity gate is most useful when describing mathematically the result of various gate operations or when discussing multi-qubit circuits.
The Pauli gates are the threePauli matrices and act on a single qubit. The PauliX,Y andZ equate, respectively, to a rotation around thex,y andz axes of theBloch sphere by radians.[b]
The Pauli-X gate is the quantum equivalent of theNOT gate for classical computers with respect to the standard basis,, which distinguishes thez axis on theBloch sphere. It is sometimes called a bit-flip as it maps to and to. Similarly, the Pauli-Y maps to and to. PauliZ leaves the basis state unchanged and maps to. Due to this nature, PauliZ is sometimes called phase-flip.
These matrices are usually represented as
The Pauli matrices areinvolutory, meaning that the square of a Pauli matrix is theidentity matrix.
The Pauli matrices alsoanti-commute, for example
Thematrix exponential of a Pauli matrix is arotation operator, often written as

Controlled gates act on 2 or more qubits, where one or more qubits act as a control for some operation.[2] For example, thecontrolled NOT gate (or CNOT or CX) acts on 2 qubits, and performs the NOT operation on the second qubit only when the first qubit is, and otherwise leaves it unchanged. With respect to the basis,,,, it is represented by theHermitianunitary matrix:
The CNOT (or controlled Pauli-X) gate can be described as the gate that maps the basis states, where isXOR.
The CNOT can be expressed in thePauli basis as:
Being a Hermitian unitary operator, CNOThas the property that and, and isinvolutory.
More generally ifU is a gate that operates on a single qubit with matrix representation
then thecontrolled-U gate is a gate that operates on two qubits in such a way that the first qubit serves as a control. It maps the basis states as follows.
The matrix representing the controlledU is
WhenU is one of the Pauli operators,X,Y,Z, the respective terms "controlled-X", "controlled-Y", or "controlled-Z" are sometimes used.[4]: 177–185 Sometimes this is shortened to just CX, CY and CZ.
In general, any single qubitunitary gate can be expressed as, whereH is aHermitian matrix, and then the controlledU is
Control can be extended to gates with arbitrary number of qubits[2] and functions in programming languages.[10] Functions can be conditioned on superposition states.[11][12]

Gates can also be controlled by classical logic. A quantum computer is controlled by aclassical computer, and behaves like acoprocessor that receives instructions from the classical computer about what gates to execute on which qubits.[13]: 42–43 [14] Classical control is simply the inclusion, or omission, of gates in the instruction sequence for the quantum computer.[4]: 26–28 [1]: 87–88
The phase shift is a family of single-qubit gates that map the basis states and. The probability of measuring a or is unchanged after applying this gate, however it modifies the phase of the quantum state. This is equivalent to tracing a horizontal circle (a line of constant latitude), or a rotation about the z-axis on theBloch sphere by radians. The phase shift gate is represented by the matrix:
where is thephase shift with theperiod2π. Some common examples are theT gate where (historically known as the gate), the phase gate (also known as the S gate, written asS, thoughS is sometimes used for SWAP gates) where and thePauli-Z gate where
The phase shift gates are related to each other as follows:
Note that the phase gate is notHermitian (except for all). These gates are different from their Hermitian conjugates:. The twoadjoint (orconjugate transpose) gates and are sometimes included in instruction sets.[15][16]
The Hadamard or Walsh-Hadamard gate, named afterJacques Hadamard (French:[adamaʁ]) andJoseph L. Walsh, acts on a single qubit. It maps the basis states and (it creates an equal superposition state if given a computational basis state). The two states and are sometimes written and respectively. The Hadamard gate performs a rotation of about the axis at theBloch sphere, and is thereforeinvolutory. It is represented by theHadamard matrix:

If theHermitian (so) Hadamard gate is used to perform achange of basis, it flips and. For example, and

The swap gate swaps two qubits. With respect to the basis,,,, it is represented by the matrix
The swap gate can be decomposed into summation form:

The Toffoli gate, named afterTommaso Toffoli and also called the CCNOT gate orDeutsch gate, is a 3-bit gate that isuniversal for classical computation but not for quantum computation. The quantum Toffoli gate is the same gate, defined for 3 qubits. If we limit ourselves to only accepting input qubits that are and, then if the first two bits are in the state it applies a Pauli-X (or NOT) on the third bit, else it does nothing. It is an example of a CC-U (controlled-controlled Unitary) gate. Since it is the quantum analog of a classical gate, it is completely specified by its truth table. The Toffoli gate is universal when combined with the single qubit Hadamard gate.[17]
| Truth table | Matrix form | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||
The Toffoli gate is related to the classicalAND () andXOR () operations as it performs the mapping on states in the computational basis.
The Toffoli gate can be expressed usingPauli matrices as

A set ofuniversal quantum gates is any set of gates to which any operation possible on a quantum computer can be reduced, that is, any other unitary operation can be expressed as a finite sequence of gates from the set. Technically, this is impossible with anything less than anuncountable set of gates since the number of possible quantum gates is uncountable, whereas the number of finite sequences from a finite set iscountable. To solve this problem, we only require that any quantum operation can be approximated by a sequence of gates from this finite set. Moreover, forunitaries on a constant number of qubits, theSolovay–Kitaev theorem guarantees that this can be done efficiently. Checking if a set of quantum gates is universal can be done usinggroup theory methods[18] and/or relation to (approximate)unitary t-designs[19]
Some universal quantum gate sets include:
A single-gate set of universal quantum gates can also be formulated using the parametrized three-qubit Deutsch gate,[21] named after physicistDavid Deutsch. It is a general case ofCC-U, orcontrolled-controlled-unitary gate, and is defined as
Unfortunately, a working Deutsch gate has remained out of reach, due to lack of a protocol. There are some proposals to realize a Deutsch gate with dipole–dipole interaction in neutral atoms.[22]
A universal logic gate for reversible classical computing, the Toffoli gate, is reducible to the Deutsch gate, thus showing that all reversible classical logic operations can be performed on a universal quantum computer.
There also exist single two-qubit gates sufficient for universality. In 1996, Adriano Barenco showed that the Deutsch gate can be decomposed using only a single two-qubit gate (Barenco gate), but it is hard to realize experimentally.[1]: 93 This feature is exclusive to quantum circuits, as there is no classical two-bit gate that is both reversible and universal.[1]: 93 Universal two-qubit gates could be implemented to improve classical reversible circuits in fast low-power microprocessors.[1]: 93

Assume that we have two gatesA andB that both act on qubits. WhenB is put afterA in a series circuit, then the effect of the two gates can be described as a single gateC.
where ismatrix multiplication. The resulting gateC will have the same dimensions asA andB. The order in which the gates would appear in a circuit diagram is reversed when multiplying them together.[4]: 17–18,22–23,62–64 [5]: 147–169
For example, putting the PauliX gate after the PauliY gate, both of which act on a single qubit, can be described as a single combined gateC:
The product symbol () is often omitted.
Allreal exponents ofunitary matrices are also unitary matrices, and all quantum gates are unitary matrices.
Positive integer exponents are equivalent to sequences of serially wired gates (e.g.), and the real exponents is a generalization of the series circuit. For example, and are both valid quantum gates.
for any unitary matrix. Theidentity matrix () behaves like aNOP[23][24] and can be represented as bare wire in quantum circuits, or not shown at all.
All gates are unitary matrices, so that and, where is theconjugate transpose. This means that negative exponents of gates areunitary inverses of their positively exponentiated counterparts:. For example, some negative exponents of thephase shift gates are and.
Note that for aHermitian matrix and because of unitarity, so for all Hermitian gates. They areinvolutory. Examples of Hermitian gates are thePauli gates,Hadamard,CNOT,SWAP andToffoli. Each Hermitian unitary matrixhas the property that where
The exponent of a gate is a multiple of the duration of time that thetime evolution operator is applied to a quantum state. E.g. in aspin qubit quantum computer the gate could be realized viaexchange interaction on thespin of twoelectrons for half the duration of a full exchange interaction.[25]

Thetensor product (orKronecker product) of two quantum gates is the gate that is equal to the two gates in parallel.[4]: 71–75 [5]: 148
If we, as in the picture, combine the Pauli-Y gate with the Pauli-X gate in parallel, then this can be written as:
Both the Pauli-X and the Pauli-Y gate act on a single qubit. The resulting gate act on two qubits.
Sometimes the tensor product symbol is omitted, and indexes are used for the operators instead.[25]
The gate is theHadamard gate() applied in parallel on 2 qubits. It can be written as:
This "two-qubit parallel Hadamard gate" will, when applied to, for example, the two-qubit zero-vector(), create a quantum state that has equal probability of being observed in any of its four possible outcomes;,,, and. We can write this operation as:

Here the amplitude for each measurable state is1⁄2. The probability to observe any state is the square of the absolute value of the measurable states amplitude, which in the above example means that there is one in four that we observe any one of the individual four cases. Seemeasurement for details.
performs theHadamard transform on two qubits. Similarly the gate performs a Hadamard transform on aregister of qubits.
When applied to a register of qubits all initialized to, the Hadamard transform puts the quantum register into a superposition with equal probability of being measured in any of its possible states:
This state is auniform superposition and it is generated as the first step in some search algorithms, for example inamplitude amplification andphase estimation.
Measuring this state results in arandom number between and.[e] How random the number is depends on thefidelity of the logic gates. If not measured, it is a quantum state with equalprobability amplitude for each of its possible states.
The Hadamard transform acts on a register with qubits such that as follows:
If two or more qubits are viewed as a single quantum state, this combined state is equal to the tensor product of the constituent qubits. Any state that can be written as a tensor product from the constituent subsystems are calledseparable states. On the other hand, anentangled state is any state that cannot be tensor-factorized, or in other words:An entangled state can not be written as a tensor product of its constituent qubits states. Special care must be taken when applying gates to constituent qubits that make up entangled states.
If we have a set ofN qubits that are entangled and wish to apply a quantum gate onM <N qubits in the set, we will have to extend the gate to takeN qubits. This application can be done by combining the gate with anidentity matrix such that their tensor product becomes a gate that act onN qubits. The identity matrix() is a representation of the gate that maps every state to itself (i.e., does nothing at all). In a circuit diagram the identity gate or matrix will often appear as just a bare wire.

For example, the Hadamard gate() acts on a single qubit, but if we feed it the first of the two qubits that constitute theentangledBell state, we cannot write that operation easily. We need to extend the Hadamard gate with the identity gate so that we can act on quantum states that spantwo qubits:
The gate can now be applied to any two-qubit state, entangled or otherwise. The gate will leave the second qubit untouched and apply the Hadamard transform to the first qubit. If applied to the Bell state in our example, we may write that as:
Thetime complexity for multiplying two-matrices is at least,[26] if using a classical machine. Because the size of a gate that operates on qubits is it means that the time for simulating a step in a quantum circuit (by means of multiplying the gates) that operates on generic entangled states is. For this reason it is believed to beintractable to simulate large entangled quantum systems using classical computers. Subsets of the gates, such as theClifford gates, or the trivial case of circuits that only implement classical Boolean functions (e.g. combinations ofX,CNOT,Toffoli), can however be efficiently simulated on classical computers.
The state vector of aquantum register with qubits is complex entries. Storing theprobability amplitudes as a list offloating point values is not tractable for large.

Because all quantum logical gates arereversible, any composition of multiple gates is also reversible. All products and tensor products (i.e.series andparallel combinations) ofunitary matrices are also unitary matrices. This means that it is possible to construct an inverse of all algorithms and functions, as long as they contain only gates.
Initialization, measurement,I/O and spontaneousdecoherence areside effects in quantum computers. Gates however arepurely functional andbijective.
If is aunitary matrix, then and. The dagger () denotes theconjugate transpose. It is also called theHermitian adjoint.
If a function is a product of gates,, the unitary inverse of the function can be constructed:
Because we have, after repeated application on itself
Similarly if the function consists of two gates and in parallel, then and.
Gates that are their own unitary inverses are calledHermitian orself-adjoint operators. Some elementary gates such as theHadamard (H) and thePauli gates (I,X,Y,Z) are Hermitian operators, while others like thephase shift (S,T,P,CPhase) gates generally are not.
For example, an algorithm for addition can be used for subtraction, if it is being "run in reverse", as its unitary inverse. Theinverse quantum Fourier transform is the unitary inverse. Unitary inverses can also be used foruncomputation. Programming languages for quantum computers, such asMicrosoft'sQ#,[10] Bernhard Ömer'sQCL,[13]: 61 andIBM'sQiskit,[27] contain function inversion as programming concepts.

Measurement (sometimes calledobservation) is irreversible and therefore not a quantum gate, because it assigns the observed quantum state to a single value. Measurement takes a quantum state and projects it to one of thebasis vectors, with a likelihood equal to the square of the vector's length (in the2-norm[4]: 66 [5]: 56, 65 ) along that basis vector.[1]: 15–17 [28][29][30] This is known as theBorn rule and appears[e] as astochastic non-reversible operation as it probabilistically sets the quantum state equal to the basis vector that represents the measured state. At the instant of measurement, the state is said to "collapse" to the definite single value that was measured. Why and how, or even if[31][32] the quantum state collapses at measurement, is called themeasurement problem.
The probability of measuring a value withprobability amplitude is, where is themodulus.
Measuring a single qubit, whose quantum state is represented by the vector, will result in with probability, and in with probability.
For example, measuring a qubit with the quantum state will yield with equal probability either or.

A quantum state that spansn qubits can be written as a vector incomplex dimensions:. This is because the tensor product ofn qubits is a vector in dimensions. This way, aregister ofn qubits can be measured to distinct states, similar to how a register ofn classicalbits can hold distinct states. Unlike with the bits of classical computers, quantum states can have non-zero probability amplitudes in multiple measurable values simultaneously. This is calledsuperposition.
The sum of all probabilities for all outcomes must always be equal to1.[f] Another way to say this is that thePythagorean theorem generalized to has that all quantum states withn qubits must satisfy[g] where is the probability amplitude for measurable state. A geometric interpretation of this is that the possiblevalue-space of a quantum state withn qubits is the surface of theunit sphere in and that theunitary transforms (i.e. quantum logic gates) applied to it are rotations on the sphere. The rotations that the gates perform form thesymmetry groupU(2n). Measurement is then a probabilistic projection of the points at the surface of thiscomplex sphere onto thebasis vectors that span the space (and labels the outcomes).
In many cases the space is represented as aHilbert space rather than some specific-dimensional complex space. The number of dimensions (defined by the basis vectors, and thus also the possible outcomes from measurement) is then often implied by the operands, for example as the requiredstate space for solving aproblem. InGrover's algorithm,Grover named this generic basis vector set"the database".
The selection of basis vectors against which to measure a quantum state will influence the outcome of the measurement.[1]: 30–35 [4]: 22, 84–85, 185–188 [33] Seechange of basis andVon Neumann entropy for details. In this article, we always use thecomputationalbasis, which means that we have labeled the basis vectors of ann-qubitregister, or use thebinary representation.
Inquantum mechanics, the basis vectors constitute anorthonormal basis.
An example of usage of an alternative measurement basis is in theBB84 cipher.

If twoquantum states (i.e.qubits, orregisters) areentangled (meaning that their combined state cannot be expressed as atensor product), measurement of one register affects or reveals the state of the other register by partially or entirely collapsing its state too. This effect can be used for computation, and is used in many algorithms.
The Hadamard-CNOT combination acts on the zero-state as follows:

This resulting state is theBell state. It cannot be described as a tensor product of two qubits. There is no solution for
because for examplew needs to be both non-zero and zero in the case ofxw andyw.
The quantum statespans the two qubits. This is calledentanglement. Measuring one of the two qubits that make up this Bell state will result in that the other qubit logically must have the same value, both must be the same: Either it will be found in the state, or in the state. If we measure one of the qubits to be for example, then the other qubit must also be, because their combined statebecame. Measurement of one of the qubits collapses the entire quantum state, that span the two qubits.
TheGHZ state is a similar entangled quantum state that spans three or more qubits.
This type of value-assignment occursinstantaneously over any distance and this has as of 2018 been experimentally verified byQUESS for distances of up to 1200 kilometers.[34][35][36] That the phenomena appears to happen instantaneously as opposed to the time it would take to traverse the distance separating the qubits at the speed of light is called theEPR paradox, and it is an open question in physics how to resolve this. Originally it was solved by giving up the assumption oflocal realism, but otherinterpretations have also emerged. For more information see theBell test experiments. Theno-communication theorem proves that this phenomenon cannot be used for faster-than-light communication ofclassical information.

Take aregister A withn qubits all initialized to, and feed it through aparallel Hadamard gate. Register A will then enter the state that have equal probability of when measured to be in any of its possible states; to. Take a second register B, also withn qubits initialized to and pairwiseCNOT its qubits with the qubits in register A, such that for eachp the qubits and forms the state.
If we now measure the qubits in register A, then register B will be found to contain the same value as A. If we however instead apply a quantum logic gateF on A and then measure, then, where is theunitary inverse ofF.
Because of howunitary inverses of gates act,. For example, say, then.
The equality will hold no matter in which order measurement is performed (on the registers A or B), assuming thatF has run to completion. Measurement can even be randomly and concurrently interleaved qubit by qubit, since the measurements assignment of one qubit will limit the possible value-space from the other entangled qubits.
Even though the equalities holds, the probabilities for measuring the possible outcomes may change as a result of applyingF, as may be the intent in a quantum search algorithm.
This effect of value-sharing via entanglement is used inShor's algorithm,phase estimation and inquantum counting. Using theFourier transform to amplify the probability amplitudes of the solution states for someproblem is a generic method known as "Fourier fishing".[37]

Functions and routines that only use gates can themselves be described as matrices, just like the smaller gates. The matrix that represents a quantum function acting on qubits has size. For example, a function that acts on a "qubyte" (aregister of 8 qubits) would be represented by a matrix with elements.
Unitary transformations that are not in the set of gates natively available at the quantum computer (the primitive gates) can be synthesised, or approximated, by combining the available primitive gates in acircuit. One way to do this is to factor the matrix that encodes the unitary transformation into a product of tensor products (i.e.series andparallel circuits) of the available primitive gates. ThegroupU(2q) is thesymmetry group for the gates that act on qubits.[2] Factorization is then theproblem of finding a path in U(2q) from thegenerating set of primitive gates. TheSolovay–Kitaev theorem shows that given a sufficient set of primitive gates, there exist an efficient approximate for any gate. For the general case with a large number of qubits this direct approach to circuit synthesis isintractable.[38][39] This puts a limit on how large functions can be brute-force factorized into primitive quantum gates. Typically quantum programs are instead built using relatively small and simple quantum functions, similar to normal classical programming.
Because of the gatesunitary nature, all functions must bereversible and always bebijective mappings of input to output. There must always exist a function such that. Functions that are not invertible can be made invertible by addingancilla qubits to the input or the output, or both. After the function has run to completion, the ancilla qubits can then either beuncomputed or left untouched. Measuring or otherwise collapsing the quantum state of an ancilla qubit (e.g. by re-initializing the value of it, or by its spontaneousdecoherence) that have not been uncomputed may result in errors,[40][41] as their state may be entangled with the qubits that are still being used in computations.
Logically irreversible operations, for example addition modulo of two-qubit registersa andb,,[h] can be made logically reversible by adding information to the output, so that the input can be computed from the output (i.e. there exists a function). In our example, this can be done by passing on one of the input registers to the output:. The output can then be used to compute the input (i.e. given the output and, we can easily find the input; is given and) and the function is made bijective.
AllBoolean algebraic expressions can be encoded as unitary transforms (quantum logic gates), for example by using combinations of thePauli-X,CNOT andToffoli gates. These gates arefunctionally complete in the Boolean logic domain.
There are many unitary transforms available in the libraries ofQ#,QCL,Qiskit, and otherquantum programming languages. It also appears in the literature.[42][43]
For example,, where is the number of qubits that constitutes theregister, is implemented as the following in QCL:[44][13][12]
condqufunctinc(quregx){// increment registerinti;fori=#x-1to0step-1{CNot(x[i],x[0::i]);// apply controlled-not from}// MSB to LSB}

In QCL, decrement is done by "undoing" increment. The prefix! is used to instead run theunitary inverse of the function.!inc(x) is the inverse ofinc(x) and instead performs the operation. Thecond keyword means that the function can beconditional.[11]
In themodel of computation used in this article (thequantum circuit model), a classic computer generates the gate composition for the quantum computer, and the quantum computer behaves as acoprocessor that receives instructions from the classical computer about which primitive gates to apply to which qubits.[13]: 36–43 [14] Measurement of quantum registers results in binary values that the classical computer can use in its computations.Quantum algorithms often contain both a classical and a quantum part. UnmeasuredI/O (sending qubits to remote computers without collapsing their quantum states) can be used to createnetworks of quantum computers.Entanglement swapping can then be used to realizedistributed algorithms with quantum computers that are not directly connected. Examples of distributed algorithms that only require the use of a handful of quantum logic gates aresuperdense coding, thequantum Byzantine agreement and theBB84cipherkey exchange protocol.