Skip to content

Commit b925793

Browse files
committed
initial commit
0 parents  commit b925793

23 files changed

Lines changed: 7335 additions & 0 deletions

.gitignore

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# dotenv environment variable files
2+
.env
3+
.env.development.local
4+
.env.test.local
5+
.env.production.local
6+
.env.local
7+
8+
_site
9+
_cache
10+
# Fresh build directory
11+
# npm dependencies
12+
node_modules/

TAIPs/_data.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
layout: taip.vto

TAIPs/taip-1.md

Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
---
2+
taip: 1
3+
title: TAP and TAIP Purpose and Guidelines
4+
status: Review
5+
type: Meta
6+
author: Pelle Braendgaard <pelle@notabene.id>
7+
created: 2024-01-09
8+
updated: 2024-01-09
9+
---
10+
11+
## Transaction Authorization Protocol (TAP) Rationale
12+
13+
Currently there is not a good abstract and chain agnostic method for multiple
14+
parties to reason about and collaborate around blockchain transactions. As an
15+
example, in a typical blockchain transaction the only party able to authorize a
16+
transaction is the holder of a blockchain account. Smart contract based
17+
applications can implement authorization functionality within their code, but
18+
they do not work universally across different kinds of blockchains. As more and
19+
more businesses and individuals work to utilize blockchains for real world
20+
applications, it becomes increasingly important to be able to manage this. See
21+
the [TAP Whitepaper] for more.
22+
23+
## What is an TAIP?
24+
25+
TAIP stands for Transaction Authorization Improvement Proposal and is designed
26+
as a basic building block for specifying and implementing the Transaction
27+
Authorization Protocol. A TAIP is a design document providing information to the
28+
community or describing a standard to be used for transaction authorization
29+
between multiple off-chain parties across multiple chains.
30+
31+
The TAIP should provide a concise technical specification of the feature and a
32+
rationale for it. The TAIP author is responsible for building consensus within
33+
the community and documenting dissenting opinions.
34+
35+
## TAIP Rationale
36+
37+
Blockchain development is still under very rapid pace. Adding authorization
38+
support to new technologies requires a decentralized approach to authoring this.
39+
40+
TAIPs allows authors to focus on specific aspects of authorization and
41+
interactions with new protocols, technologies, and workflows.
42+
43+
## TAIP Formats and Templates
44+
45+
TAIPs should be written in [markdown][markdown] format. Image files should be
46+
included in a subdirectory of the `assets` folder for that TAIP as follows:
47+
`assets/taip-N` (where **N** is to be replaced with the TAIP number). When
48+
linking to an image in the TAIP, use relative links such as
49+
`../assets/taip-1/image.png`.
50+
51+
## TAIP Header Preamble
52+
53+
Each TAIP must begin with an [RFC 822] style header preamble, preceded and
54+
followed by three hyphens (`---`). This header is also termed
55+
["front matter" by Jekyll]. The headers must appear in the following order.
56+
Headers marked with "*" are optional and are described below. All other headers
57+
are required.
58+
59+
- `taip:` TAIP number (this is determined by the TAIP editor)
60+
- `title:` TAIP title
61+
- `author:` a list of the author's or authors' name(s) and/or username(s), or
62+
name(s) and email(s). Details are below.
63+
- `discussions-to: *` URL pointing to the official discussion thread
64+
- `status:` `Draft`, `Rejected`, `Review`, `Last Call`, `Withdrawn`, `Final`,
65+
`Superseded`
66+
- `review-period-end: *` date review period ends
67+
- `type:` `Standard`, `Informational`, `Meta`
68+
- `created:` date created on
69+
- `updated: *` comma separated list of dates
70+
- `requires: *` TAIP number(s); if multiple, use `1, 2` format to create a YAML
71+
array
72+
- `replaces: *` TAIP number(s); if multiple, use `1, 2` format to create a YAML
73+
array
74+
- `superseded-by: *` TAIP number(s) or URL of non-TAIP standard
75+
76+
Headers that permit lists must separate elements with commas.
77+
78+
Headers requiring dates will always do so in the format of ISO 8601
79+
(yyyy-mm-dd).
80+
81+
#### `author` header
82+
83+
The `author` header optionally lists the names, email addresses or usernames of
84+
the authors/owners of the TAIP. Those who prefer anonymity may use a username
85+
only, or a first name and a username. The format of the author header value must
86+
be:
87+
88+
> Random J. User &lt;address@dom.ain&gt;
89+
90+
or
91+
92+
> Random J. User (@username)
93+
94+
if the email address or GitHub username is included, and
95+
96+
> Random J. User
97+
98+
if the email address is not given.
99+
100+
#### `resolution` header
101+
102+
#### `discussions-to` header
103+
104+
While a TAIP is a draft, a `discussions-to` header will indicate the mailing
105+
list or URL where the TAIP is being discussed.
106+
107+
As a single exception, `discussions-to` cannot point to GitHub pull requests.
108+
109+
#### `type` header
110+
111+
The `type` header specifies the type of TAIP: Standard, Meta, or Informational.
112+
113+
#### `created` header
114+
115+
The `created` header records the date that the TAIP was assigned a number. Both
116+
headers should be in yyyy-mm-dd format, e.g. 2001-08-14.
117+
118+
#### `updated` header
119+
120+
The `updated` header records the date(s) when the TAIP was updated with
121+
"substantial" changes. This header is only valid for TAIPs of Draft and Active
122+
status.
123+
124+
#### `requires` header
125+
126+
TAIPs may have a `requires` header, indicating the TAIP(s) on which this TAIP
127+
depends. Note that if the TAIP requires multiple others, the value should be an
128+
array of integers (no `"` needed) and/or URLs (wrapped in `"`s) within square
129+
brackets (`[]`).
130+
131+
#### `superseded-by` and `replaces` headers
132+
133+
TAIPs may also have a `superseded-by` header indicating that a TAIP has been
134+
rendered obsolete by a later document; the value is the number of the TAIP that
135+
replaces the current document. The newer TAIP must have a `replaces` header
136+
containing the number of the TAIP that it rendered obsolete.
137+
138+
## Auxiliary Files
139+
140+
TAIPs may include auxiliary files such as diagrams. Such files must be named
141+
TAIP-XXXX-Y.ext, where “XXXX” is the TAIP number, “Y” is a serial number
142+
(starting at 1), and “ext” is replaced by the actual file extension (e.g.
143+
“png”).
144+
145+
## Design Principles of for TAIPs
146+
147+
- Follow the
148+
~~[Robustness Principle](https://en.wikipedia.org/wiki/Robustness_principle)~~
149+
- _“be conservative in what you do, be liberal in what you accept from
150+
others”_
151+
- It should be message based and support peer 2 peer messaging
152+
- It should support self-hosted wallets under the direct control of an ultimate
153+
party
154+
- Avoid reliance on centralized gateways or associations to impose trust by
155+
utilizing Decentralized Identifiers (DIDs) for all parties and agents
156+
involved.
157+
- Certain workflows such as the Travel Rule flow, should be able to be
158+
implemented even if one services to participates actively in the flow, but
159+
should encourage and help push more services to be active participants
160+
- Any agent to the transaction should be able to initiate a transaction
161+
- There is no strict message flow defined, but strict flows can be added through
162+
TAIPs
163+
- To be able to support a transition for companies adopting it, it should be
164+
possible to create messages after the fact outlining the meta-data for an
165+
exiting crypto transaction
166+
- Modern blockchain transactions often include multiple individual real world
167+
transactions, such as Bitcoin UTXO transactions or airdrop transactions.
168+
Several kinds of real world transactions are also implemented through multiple
169+
blockchain transactions such as multi-sigs and many kinds of transactions
170+
requiring pre-authorization. Thus transactions in TAP could have a many to
171+
many relationship with blockchain transactions.
172+
- Separate out the exchange of sensitive PII information between agents to be
173+
fully end-to-end encrypted and handled through the messaging flow on a need to
174+
know policy based basis
175+
- Allow each agent to be able to authorize or reject a transfer, while
176+
understanding that for blockchain transactions only the agent holding the keys
177+
ultimately authorizes a transaction
178+
- Support discovery of relevant agents to the flow, by allowing each agent to be
179+
able to inject an intermediary agent
180+
- Allow each agent to be able to replace themselves from the transaction with
181+
another DID, e.g. redirect the transaction to another legal entity or a
182+
custodial service provider
183+
- Built primarily on existing open standards
184+
- Flexible message encoding default, but default to
185+
[JSON-LD](https://json-ld.org)
186+
- Use [Chain Agnostic standards](https://chainagnostic.org) whenever possible
187+
for blockchain relevant standards, such as:
188+
- References to blockchain assets should rely on
189+
[CAIP-19](https://chainagnostic.org/CAIPs/caip-19)
190+
- References to blockchain accounts should rely on
191+
[CAIP-10](https://chainagnostic.org/CAIPs/caip-10)
192+
- Identifiers for parties should use
193+
[RFC-3987 IRIs](https://datatracker.ietf.org/doc/html/rfc3987), but more
194+
specifically
195+
[W3C Decentralized Identifiers](https://www.w3.org/TR/did-core/) (DIDs) are
196+
recommended
197+
- Identifiers for agents should use
198+
[W3C Decentralized Identifiers](https://www.w3.org/TR/did-core/) (DIDs)
199+
200+
- References to agents or other services should also use DID’s, but prefer DID
201+
methods that can immediately be used to identify it. Eg.
202+
[PKH-DID](https://github.com/w3c-ccg/did-pkh/blob/main/did-pkh-method-draft.md)
203+
methods for blockchain wallets or smart contracts and
204+
[Web DIDs](https://w3c-ccg.github.io/did-method-web/) for centralized services
205+
- Messaging and Encryption should be based on proven digital signature and
206+
encryption standards:
207+
- [IETF RFC-7515 JWS](https://www.rfc-editor.org/rfc/rfc7515) for signed data
208+
between agents
209+
- [IETF RFC-7516 JWE](https://www.rfc-editor.org/rfc/rfc7516.html) for
210+
encrypted data between agents
211+
- [DID-Comm V2](https://identity.foundation/didcomm-messaging/spec/v2.0/)
212+
semantics for decentralized messaging between services
213+
- Allow anyone to build their own agent implementing the protocol
214+
215+
## Transferring TAIP Ownership
216+
217+
It occasionally becomes necessary to transfer ownership of TAIPs to a new
218+
champion. In general, we'd like to retain the original author as a co-author of
219+
the transferred TAIP, but that's really up to the original author. A good reason
220+
to transfer ownership is because the original author no longer has the time or
221+
interest in updating it or following through with the TAIP process, or has
222+
fallen off the face of the 'net (i.e. is unreachable or isn't responding to
223+
email). A bad reason to transfer ownership is because you don't agree with the
224+
direction of the TAIP. We try to build consensus around a TAIP, but if that's
225+
not possible, you can always submit a competing TAIP.
226+
227+
If you are interested in assuming ownership of a TAIP, send a message asking to
228+
take over, addressed to both the original author and the TAIP editor. If the
229+
original author doesn't respond to email in a timely manner, the TAIP editor
230+
will make a unilateral decision (it's not like such decisions can't be reversed
231+
:)).
232+
233+
## TAIP Editors
234+
235+
Temporarily [Notabene](https://notabene.id) will act as editors. Notabene
236+
pledges to implement a simple informal governance structure during H1 2024 to
237+
include more parties and lessent the reliance on a single company.
238+
239+
## TAIP Editorial Process
240+
241+
For each new TAIP that comes in, an editor does the following:
242+
243+
- Read the TAIP to check if it is ready: sound and complete. The ideas must make
244+
technical sense, even if they don't seem likely to get to final status.
245+
- The title should accurately describe the content.
246+
- Check the TAIP for language (spelling, grammar, sentence structure, etc.),
247+
markup (Github flavored Markdown), code style.
248+
249+
If the TAIP isn't ready, the editor will send it back to the author for
250+
revision, with specific instructions.
251+
252+
Once the TAIP is ready for the repository, the TAIP editor will:
253+
254+
- Assign a TAIP number (generally the PR number or, if preferred by the author,
255+
the Issue # if there was discussion in the Issues section of this repository
256+
about this TAIP)
257+
258+
- Merge the corresponding pull request
259+
260+
- Send a message back to the TAIP author with the next step.
261+
262+
The editors don't pass judgment on TAIPs. We merely do the administrative &
263+
editorial part.
264+
265+
## History
266+
267+
This document was derived heavily from [CAIP-1] written by Ligi, which was
268+
derived by [Bitcoin's BIP-0001] written by Amir Taaki, which in turn was derived
269+
from [Python's PEP-0001]. In many places text was simply copied and modified.
270+
Although the PEP-0001 text was written by Barry Warsaw, Jeremy Hylton, and David
271+
Goodger, they are not responsible for its use in Transaction Authorization
272+
Improvement Proposals, and should not be bothered with technical questions
273+
specific to TAIPs. Please direct all comments to the TAIP editors.
274+
275+
### References
276+
277+
[TAP Whitepaper]: https://docs.google.com/document/d/1z16nPRjiCFGsnMqr7GiBRMCMMPBG6laaS337s4oJrEw/edit#heading=h.ujq0dkl3njwc
278+
[CAIP-1]: https://chainagnostic.org/CAIPs/caip-1
279+
[markdown]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet
280+
[Bitcoin's BIP-0001]: https://github.com/bitcoin/bips
281+
[Python's PEP-0001]: https://www.python.org/dev/peps/
282+
[RFC 822]: https://www.ietf.org/rfc/rfc822.txt
283+
["front matter" by Jekyll]: https://jekyllrb.com/docs/front-matter/
284+
285+
## Copyright
286+
287+
Copyright and related rights waived via [CC0](../LICENSE).

0 commit comments

Comments
 (0)