Replies: 4 comments 14 replies
-
Interesting. Don't we need a signing date per signature? You might also develop a regular event for the contract and then each party signs another event kind just with the date. In that way, the signature is cryptographically verifiable and not just a listed party in somebody else's event. |
Beta Was this translation helpful? Give feedback.
-
Ok, how about this: "Contract Signing Invitation" type: {
"kind": 900,
"created_at": [Creation Timestamp],
"content": "[Content in Markdown]",
"tags": [
["title", "<Contract Title>"],
["summary", "<Short Description>"], // Optional: Short Description for preview
["valid_from", "Timestamp"], // Optional: Start date of the contract
["valid_to", "Timestamp"], // Optional: End date of the contract
["p", "<party's 1 pubkey>", "party"]
["p", "<party's 2 pubkey>", "party"]
["p", "<party's 3 pubkey>", "party"]
["expiration", "<Time stamp limit to sign>"],
],
"pubkey": "[Signer's Public Key]",
"id": "[Event ID]",
} "Signature" (in legally-binding agreement) Type: {
"kind": 901,
"tags": [
[ "e", "<Contract's (kind:900) Event ID>" ]
],
"pubkey": "[Party's Public Key]",
"created_at": [Creation Timestamp],
"content": "",
"id": "[Event ID]",
} "Signing Witness" Type: {
"kind": 902,
"tags": [
[ "e", "<Contract's (kind:900) Event ID>" ]
[ "e", "<Signature (kind:901) Event ID>" ]
],
"pubkey": "[Party's Public Key]",
"created_at": [Creation Timestamp],
"content": "",
"id": "[Event ID]",
} "Contract Execution" type: {
"kind": 903,
"created_at": [Creation Timestamp],
"content": "<Stringified JSON of the signed kind:900>",
"tags": [
["title", "<Contract Title>"],
["summary", "<Short Description>"], // Optional: Short Description for preview
["valid_from", "Timestamp"], // Optional: Start date of the contract
["valid_to", "Timestamp"], // Optional: End date of the contract
["e", "<Contract's (kind:900) Event ID>" ] // Base text.
["p", "<party's 1 pubkey>", "party", "Stringified JSON of the signed kind:901"]
["p", "<party's 2 pubkey>", "party", "Stringified JSON of the signed kind:901"]
["p", "<party's 3 pubkey>", "party", "Stringified JSON of the signed kind:901"]
["p", "<party's 4 pubkey>", "witness", "Stringified JSON of the signed kind:902"]
["p", "<party's 5 pubkey>", "witness", "Stringified JSON of the signed kind:902"]
["p", "<party's 6 pubkey>", "witness", "Stringified JSON of the signed kind:902"]
],
"pubkey": "[Signer's Public Key]",
"id": "[Event ID]",
} On the last one, all signatures MUST match the contract invitation event ID. |
Beta Was this translation helpful? Give feedback.
-
Excellent! Which NIP number should I utilize? |
Beta Was this translation helpful? Give feedback.
-
What if a party wishes to sign but doesn't agree with the terms of the contract? |
Beta Was this translation helpful? Give feedback.
-
NIP Proposal for Digital Contracts in Nostr
NIP-XX: Digital Contracts
Status: Draft
Type: Standard
Created: [Creation Date]
Author: [Your Name or Alias]
Abstract
This NIP proposes a new event type,
kind:300XX
, to represent digital contracts, covenants, and agreements within the Nostr protocol. These can be signed, verified, and referenced by other events in the protocol.Motivation
As digital transactions, promises, and agreements become more prevalent, it's essential to have a standardized representation of contracts, covenants, and agreements in Nostr. This NIP aims to provide a structure and guidelines for creating, signing, and managing these within Nostr.
Specification
Types:
Format: Following NIP-23 (Long-form Content), the content should be in Markdown format to structure and present the content in a human-readable manner.
Metadata: Using NIP-78 (Application-specific data), specific application metadata fields can be added to the event, such as:
title
: Title of the contract, covenant, or agreement.parties
: Parties involved.signed_date
: Date it was signed.expiry_date
: Expiration date, if applicable.type
: Whether it's a Contract, Covenant, or Agreement.Timestamping with OpenTimestamps: Following NIP-03 (OpenTimestamps Attestations for Events), once signed, OpenTimestamps can be used to create a cryptographic proof of existence at a specific moment. This proof is stored on the Bitcoin blockchain, providing immutable evidence of the date and time of signing.
References and Linking: Can reference other events in Nostr, such as annexes, terms and conditions, or any other relevant document.
New
kind
: A newkind:300XX
is introduced to represent digital contracts, covenants, and agreements. Thiskind
is specific and should be treated differently from other event types in the protocol.Example Event
Considerations
Beta Was this translation helpful? Give feedback.
All reactions