跳至主要内容

NOTE协议:比特币智能合约的新里程碑

· 1分钟阅读

比特币自诞生以来,经历了无数次技术革新。NOTE协议的出现标志着比特币历史上的一项重大进展。经过半年的协议设计和生态开发,NOTE协议近期正式面向全球公开。我们的愿景与比特币一致,为全球60亿人提供点对点的数字货币。

一、NOTE协议简介

NOTE协议是一种基于比特币UTXO模型的数字资产发行协议,专为能影响全球60亿人的区块链产品开发而设计。NOTE协议真正构建在比特币的UTXO模型之上,采用与TypeScript兼容的智能合约语言sCrypt,编译结果为比特币原生操作码,具备图灵完备性,支持Oracle等强大功能。NOTE协议支持链上多签、MAST、闪电网络,同时提供链下带有状态继承功能的运行环境。

二、NOTE协议的独特优势

与Ordinals和Atomicals等协议不同,NOTE协议的所有操作均基于密码学,由比特币矿工确保资产所有权。NOTE的交易成本极低,无需像其他协议那样发送两笔交易。更重要的是,NOTE协议支持智能合约,其首个合约示例实现了Bitwork挖矿和随时间递减的挖矿量功能。基于比特币UTXO模型的智能合约,开启了以太坊EVM类型智能合约之外的新大门,以比特币和UTXO模型的高效并发、最大共识为基础,为所有区块链开发者提供了新选择。sCrypt团队提供了完整的开发、编译、测试环境,从学习曲线到开发环境,从公平启动到实现复杂功能的可行性,都是革命性的飞跃。

三、协议贡献团队

NOTE协议是核心技术开源、无VC投资的极客协议,采用MIT授权,社区参与贡献。第一个核心贡献团队来自日本东京的区块链专业技术团队,该团队开发过以太坊EVM多链钱包Wallet3.io、比特币UTXO钱包ChainBow.io、日本持牌比特币交易所,获得日本数字大臣奖的Web3项目、2018年问世的极早期DeFi原型、区块链基础数据服务和区块链浏览器等十余个产品。另有多位大神贡献者提供了Python版本、Go版本的开源钱包,以及来自NoteMarket团队的浏览器插件钱包和交易市场。

四、技术细节解析

NOTE协议采取创新方法管理比特币交易和资产。传统比特币交易中,交易输入解锁旧的UTXO并生成新的UTXO。在NOTE协议中,交易输出被视为用户账号,由交易输出脚本哈希表示,隐私性强,且资产类型和数量源自交易输入。通过这种设计,NOTE简化了资产追踪管理,提升了隐私性。

相比Ordinals和Atomicals利用P2TR(Taproot)赎回脚本添加不可访问区域,NOTE协议允许通过操作码直接操作解锁数据,提高了数据的可用性。此外,NOTE协议不限于使用P2TR,还可通过P2SH、P2WSH等实现,增加了协议的灵活性和跨链能力。

其链下智能合约运行环境,基于中本聪第一版未删减的BVM开发,来自Bitcore核心代码库,已稳定运行十余年。NOTE协议提供多个运行时变量,包括资产发行数量、当前高度、区块时间、交易的输入输出、交易发起账号,前一个交易的变量可以被下一个交易继承访问,实现状态传递和校验,为基于UTXO模型的新DeFi提供了技术基础。

五、智能合约与未来展望

NOTE协议目前提供多个N20资产发行智能合约代码,已发布在GitHub上,展示了NOTE协议在比特币网络上实现复杂逻辑的能力。开发者可以通过开发智能合约,实现如AI解决问题悬赏等真实世界应用,基于全球比特币的数亿用户基础和强大共识,开发者必将展示出自己产品的实用性和创新潜力。第一个基于NOTE协议的密码管理和加密笔记管理软件已经上市 https://note.sv 它是完全面向普通人开发的真实区块链应用。相信伴随着大量开发者的加入,会有更多的生态应用涌现出来。NOTE协议目前在制定和完善N721 NFT资产发行以及Alias DID协议。

NOTE协议在设计之初即高瞻远瞩,为高性能的区块链产品而设计,提供了资产无桥跨链转移的设计,将来将无限放大可能性。

六、总结

NOTE协议代表了比特币网络向智能合约功能扩展的重要进展。其关键特点包括:

  • 智能合约支持:扩展比特币应用范围,支持复杂逻辑和交易类型。
  • 基于UTXO模型:借力比特币的安全性和高效率。
  • 跨链功能:支持不同UTXO链之间的资产移动。
  • 真实世界应用:应用高级密码学技术,支持复杂场景。
  • 低成本高效率:优化数据存储,减少交易成本。
  • 开源和社区驱动:强调开源精神,促进技术透明性和可信赖性。

随着NOTE协议的发展,我们可以期待更多创新应用的出现,这些应用将在保持比特币核心价值观的同时,为用户提供更丰富的功能和更好的体验。


NOTE协议

图灵完备和停机问题

· 1分钟阅读

图灵完备和停机问题

我们说原生的比特币脚本语言是图灵完备的。会被很多人喷。

图灵完备(Turing Complete)语言是指一种可以实现任何图灵机能够计算的计算的编程语言。这个概念来源于阿兰·图灵(Alan Turing),他提出了图灵机模型,这是一种抽象的机器,通过读写无限长纸带上的符号来执行计算。

如果一个编程语言是图灵完备的,意味着它能够模拟图灵机的所有计算功能。这通常意味着这种语言必须能够进行条件分支(比如if/else语句)和循环(或递归),这样才能根据数据做出决策并重复执行某些操作直到满足特定条件。

纸带无限长,一个死循环的程序可以一直执行下去。这是否合理?能实现死循环的程序就是图灵完备的,这种说法是否合理?

实际上,简单的死循环可以通过非常基础的指令集实现,但如果没有足够的控制结构(如条件分支)和数据处理能力,这样的系统还是不能称为图灵完备的。图灵完备需要的是能够表达任意复杂的算法逻辑,包括但不限于循环结构。同时,死循环带来另外一个问题:停机问题。

停机问题( Halting Problem)是计算理论中一个非常著名的问题,同样由阿兰·图灵在上世纪30年代提出。这个问题探讨是否存在一个算法,该算法能够判定任何给定的程序和其输入是否最终停止执行(即程序会在有限的步骤后结束,而不是无限循环下去)。

图灵证明了停机问题是不可解的。图灵完备系统能够表达和执行所有可能的程序包括那些永不停机的程序。而停机问题的不可解性直接源于这种系统的这种能力。简而言之,图灵完备系统的强大计算能力带来了停机问题的不确定性,因为在这样的系统中,我们无法预先知道某个程序是否能够在所有情况下停止。

比特币脚本语言被误认为不是图灵完备的,主要是因为它的操作码中没有显式的循环命令。然而,通过复杂的脚本和条件逻辑,可以间接实现循环行为,类似于汇编语言。例如,实现从1加到100的累加,可以通过连续的加法操作来实现,直到达到100。这种方法有效避免了停机问题,因为比特币的交易和区块有明确的大小限制,从而保证脚本在达到某个大小后必须停止。

Image1

因此,可以认为: 比特币脚本语言在某种程度上是图灵完备的,并且通过大小限制解决了停机问题。

在以太坊中,每个操作码消耗的“gas”起到了类似的限制作用,避免了程序无限运行的问题。如果没有其他限制的话,理论上以太坊大户可以用钱实现执行一年的程序,堵死EVM。

无论资金多少,比特币的设计确保了不可能无限增大区块大小,这是共识机制的一部分。保持系统的简洁性(KISS原则 Keep it Simple, Stupid.)是 #中本聪 设计比特币时的重要考虑因素。

在 Note协议的链下合约环境中,脚本大小仍受到严格控制,当前约有2.5K的脚本JSON存储空间,未来可能扩展到更大容量。

NOTE协议在持续升级

· 1分钟阅读

NOTE协议自2024年2月推出概念验证版索引器以来,已经吸引了广泛关注。根据用户反馈和需求,我们不断对协议进行升级改进。

截至4月4日,我们已经实施了以下升级:

  • 完全展开了Payload数据区,使得Payload数据既可以存储在解锁脚本中,也可以存放在赎回脚本中。
  • 引入了N20的Burn方法,现在可以销毁Token了。
  • 对链下合约执行环境进行了扩展,增加了大量环境变量,包括区块信息(如区块时间、区块哈希、区块高度)以及交易信息(如交易哈希、所有输入和输出)。此外,还包括了Tick信息,例如mint的总额等。
  • 对索引器代码进行了大规模重构。

本次升级的目标之一是让任何人都能参与到NOTE智能合约的开发中来。这意味着任何人都可以创建属于自己的智能合约,并将其发布到NOTE索引器上,从而完成数字资产的发行。我们正在制作一个详尽的合约创建教程。

通过2月份发布的POW挖矿合约,我们可以窥见NOTE协议的强大功能。

我们添加了一些注释来帮助大家更好地理解:

//每个合约都是一个继承自SmartContract的子类,它里面的成员变量都是只读的,需要使用@prop()装饰器来修饰。
export class N20_Pow extends SmartContract {
@prop()
readonly tick: ByteString

@prop()
readonly max: bigint

@prop()
readonly lim: bigint

@prop()
readonly dec: bigint

@prop()
readonly bitwork: ByteString

@prop()
readonly start: bigint

//合约如果包含成员变量,需要使用构造函数进行初始化
constructor(tick: ByteString, max: bigint, lim: bigint, dec: bigint, bitwork: ByteString, start: bigint) {
super(...arguments)
// 数字资产的标识符,名字
this.tick = tick
// 数字资产的最大发行量,如果不设置上限,可以指定为0
this.max = max
// 每个交易的挖矿上限,不能超过最大值
this.lim = lim
// 数字资产的小数单位,比如dec=8,那么1个代币后面就要跟8个零,所有的数量值amt,包括max和lim都是此影响。100000000表示1.00000000
this.dec = dec
//挖矿难度,每笔交易的hash256需要的前置字符
this.bitwork = bitwork
// 挖矿合约的起始高度,用于防止提前预挖
this.start = start
}

//挖矿的区块限制算法,需要使用@method()装饰器来修饰
@method()
getBlockLimit(height: bigint): bigint {
assert(height >= this.start, 'Block height is too low')
//每1000个区块减半一次,减半的次数由区块高度减去起始高度决定
let halvings = (height - this.start) / 1000n
// 最多减半7次
halvings = halvings > 7n ? 7n : halvings
// 每次减半挖矿数量限额都减半。此处使用2进制rshift操作符实现除以2的操作
const subsidy = rshift(this.lim, halvings)
return subsidy
}

// 挖矿的数量限制算法,需要使用@method()装饰器来修饰
@method()
getAmountLimit(currentMined: bigint): bigint {
// 从当前已经挖矿的数量占总量的多少开始数量限制
let miningAmount = this.lim
let threshold = this.max / 2n

//循环7次,每次循环,如果当前挖矿数量达到阈值,则将挖矿数量减半,并更新阈值
for (let halving = 0n; halving < 7n; halving++) {
if (currentMined >= threshold) {
miningAmount /= 2n // Halve the mining amount
threshold += rshift(this.max, halving + 2n) // Update the next threshold
}
}

return miningAmount
}

@method()
public mint(tick: ByteString, amt: bigint, total: bigint, height: bigint, tx: ByteString) {
//检查交易的hash256的前置字符是否符合挖矿合约的难度要求
const txid = hash256(tx)
assert(slice(txid, 0n, len(this.bitwork)) == this.bitwork, 'not match target')
// 检查挖矿总量是否超过最大发行量
assert(this.max == 0n || total <= this.max, 'Over max')
assert(tick == this.tick, 'Tick does not match')
// 检查挖矿数量是否超过区块限制以及总量减半限制
const limit1 = this.getBlockLimit(height)
const limit2 = this.getAmountLimit(total)
const limit = limit1 > limit2 ? limit2 : limit1
assert(amt <= limit && amt <= this.max - total, 'Amount check failed')
}

// 转移Token的方法,需要使用@method()装饰器来修饰
@method()
public transfer(tick: ByteString) {
assert(tick == this.tick, 'Tick does not match')
}
}
注意

在上面的代码中有一个BUG. 如果你希望使用它发行资产,注意不要让max=0. 任何资产发行都需要谨慎测试合约。

本次升级新增了Burn方法,允许销毁Token。以下是一个新示例

//此例子没有使用构造函数,而是使用静态设置参数的方式,因为数值完全在合约中,无法复用给其他的数字资产
export class N20_Joss extends SmartContract {
//joss paper 纸钱:一种金银纸,被剪成类似钱币的形状,在神像前焚烧的纸钱。
@prop()
static tick: ByteString = toByteString('JOSS', true)

//没有发行上限
@prop()
static max: bigint = 0n

//每次可以发行1万个
@prop()
static lim: bigint = 10000n

//没有小数位
@prop()
static dec: bigint = 0n

@method()
public mint(tick: ByteString, amt: bigint) {
assert(tick == N20_Joss.tick, 'Tick does not match')
//发行数量不能超过限额1万
assert(amt == N20_Joss.lim, 'Limit does not match')
}

@method()
public transfer() {
//不能转账
assert(false)
}

@method()
public burn(tick: ByteString) {
//可以烧掉
assert(tick == N20_Joss.tick, 'Tick does not match')
}
}

N20_Joss合约部署在BTC主网的交易是: https://mempool.space/tx/c2cda4c9da3a91bd245d9f6250b5ca8f2ec81d50c14821e87a033fde1f3b5561

NOTE协议支持智能合约,这是其与其他协议最大的不同。NOTE钱包和索引器为智能合约提供了执行环境,使用户能够编写自己的智能合约。关于智能合约的基础知识,可以参考:

为何比特币智能合约是图灵完备的语言:

NOTE协议的智能合约开发教程即将推出,敬请期待。

NOTE,首个实用的原生比特币智能合约协议

· 1分钟阅读

NOTE协议标志着比特币历史上的一项重大进展。

NOTE协议是基于比特币UTXO模型的数字资产发行协议,区别于最近出现的其他协议,它真正构建在比特币的UTXO模型之上。采用与TypeScript兼容的智能合约语言,其约编译结果为比特币原生操作码,图灵完备,可包括Oracle和零知识证明在内的强大功能集合。

与Ordinals和Atomicals等协议不同,NOTE虽然也通过索引器来统计用户资产,但其全部基于密码学,由比特币矿工确保资产所有权,避免了因索引器标记而发生的误操作问题。此外,NOTE的交易成本极低,无需像Ordinals和Atomicals那样发送两笔交易。更为重要的是,NOTE协议支持智能合约,比如实现Bitwork挖矿和随时间递减的挖矿量。它使用的是实际的Token数值,而非基于Satoshi编号的素数协议也非依赖UTXO余额的染色币方案。

相较于许多“链间桥接协议”,NOTE发行的是比特币原生资产,不涉及使用BTC作为抵押在其他链上发行和交易资产的操作。

协议Ordinals/BRC20Atomicals/ARC20EVM/Zk Layer2NOTE/N20
使用UTXO使用使用不使用使用
是否为比特币资产
支持智能合约不支持不支持支持(EVM账号)支持(比特币脚本)
使用索引器使用使用不使用使用
索引器的视线逻辑聪序数编码染色聪-密码学
跨链转账不支持不支持通过跨链桥支持协议支持
交易费用中低
项目资金未知有或者未知

NOTE协议支持跨链,它可以将比特币上的原生资产发送给其他UTXO链,以及接收来自其他UTXO链的资产。这一切都基于密码学和比特币区块链共识。

NOTE协议,完全来自比特币开发社区开发者的开发。

下面进行详细的技术解读

UTXO模型的优势正在重新回到大众视野。比特币作为数字货币的定海神针,需要可用而且好用的技术方案,NOTE协议应运而生。

比特币UTXO模型相比较EVM模型有巨大的效率和并发优势。但在UTXO模型的比特币上发行原生资产,涉及到多个难以解决的问题,主要课题是资产如何标识。另外就是紧密的交易结构中资产如何保存。

一个UTXO形式的交易如下图

Image1

NOTE协议采取了一种创新的方法来处理比特币交易和资产的管理,这种方法与其他协议方案有显著的不同。在传统的比特币交易中,交易的输入部分解锁了之前交易的输出(即旧的UTXO),并生成新的交易输出(即新的UTXO)。在其他协议方案中,资产被绑定在新生成的UTXO上,导致用户的资产分散在不同的UTXO中。这种方式需要索引器和钱包维护一个详尽的UTXO列表来确保资产绑定关系的准确性,同时必须非常谨慎地管理带有资产标记的UTXO,以避免误花费,并且必须一次性花费整个UTXO。

相比之下,NOTE协议采用了一种将交易输出视为用户账号的方法,其中用户的账号由其交易输出脚本哈希表示,如同示例中的TX1交易输出所示。这种账号是完全隐私的,其绑定的资产类型和数量源自于TX1的解锁输入。当在TX2中花费这些资产时,经过比特币矿工的确认解锁后,会生成新的交易输出。在这个过程中,NOTE协议的索引器仅需记录在解锁时公开的交易细节,并且能够在区块确认后提供默克尔证明来验证交易的有效性。

这种设计不仅简化了资产的追踪和管理,减少了用户资产分割的问题,还增加了交易的隐私性。通过将交易输出用作账号,并依赖于比特币网络的矿工验证和区块链共识机制,NOTE协议为数字资产的管理提供了一种更加安全、高效和隐私保护的方法。

一个典型的Taproot P2TR格式的交易如下所示 Image2

NOTE协议采用的技术策略与Ordinals和Atomicals协议有显著的不同之处。Ordinals和Atomicals利用P2TR(Taproot)的赎回脚本,通过添加OP_FALSE OP_IF操作码构造了一个不可访问的数据区域,以此来嵌入额外数据。而NOTE协议则允许通过操作码直接操作解锁数据,提高了数据的可用性。在NOTE协议中,示例脚本能够直接从堆栈中弹出数据,更复杂的脚本则能实现如hashlock等链上的检查功能。

此外,NOTE协议不限于使用P2TR,它还可以通过P2SH(Pay to Script Hash)、P2WSH(Pay to Witness Script Hash)和非标准脚本来实现,这增加了协议的灵活性和跨链资产交易的能力。NOTE协议使用msgpack数据编码而不是json编码,这种方式更为紧凑,有助于减少每笔交易的数据量,从而降低用户的交易成本。

在NOTE协议中,由特定的赎回脚本构建的地址充当用户账户。这些账户地址在被正确解锁时才能被矿工确认。解锁脚本中包含的资产交易数据在解锁时被索引器识别,并进行链下智能合约处理。只有在链下合约验证通过的资产交易才会被索引器记录,这一机制有效防止了比特币钱包误花费NOTE的UTXO,并且使得UTXO中的微量比特币(例如546 Satoshi)可以被回收。

NOTE协议的设计考虑了比特币网络自2017年以来关于隐私和交易空间优化的多次升级。与此同时,它也借鉴了BSV(Bitcoin SV)所代表的大区块策略,深入挖掘比特币脚本的潜能。NOTE协议的智能合约解决方案是基于sCrypt团队开发的比特币智能合约语言,该语言支持链下合约验证。由于比特币脚本语言是图灵完备的且可以确保在给定的脚本长度内执行完成,因此索引器不会因智能合约设计不当而陷入死循环,保证了系统的稳定性和效率。

演示用的N20资产发行智能合约项目已经被发布在GitHub上。 https://github.com/NoteProtocol/scryptdemo

Image3

它演示了NOTE协议下的Pow合约通过模拟比特币挖矿的减半机制和Atomicals的Bitwork难度挖矿,展示了在比特币网络上实现复杂逻辑的能力。通过生成1KB大小的比特币脚本,该合约允许索引器调用并校验交易是否符合协议规定,这一过程体现了智能合约在比特币网络中应用的可行性和灵活性。

更复杂的基于Rabin签名算法的Oracle和基于零知识证明的复杂合约则提供了高级别的应用场景。这些技术在智能合约的实现中,特别是在需要验证特定条件或执行特定逻辑时,发挥着至关重要的作用。

通过利用这些智能合约,比特币上的资产发行可以被用于实现真实世界的应用场景,例如AI解决问题的悬赏金场景。在这类场景中,只要有人能提交一个可验证的计算结果,就能获得奖赏。这不仅显示了比特币智能合约的实用性,还展示了它们如何促进复杂应用的实现,这些应用超越了传统的金融交易和资产管理。

N20 Token资产发行功能是NOTE协议中众多功能中的一部分。NOTE协议还包括DID(去中心化身份)以及加密数据和所有权标识,并且随着N721 NFT和Alias(比特币别名系统)的制定和验证进程,NOTE协议的能力和应用范围预计将进一步扩展。

为了让用户能够体验N20 Token的铸造(mint)和转移(transfer),一个命令行钱包已经发布在GitHub上,而开源的索引器也计划将被发布。

NOTE协议背后的开源代码贡献者们强调,所有内容仅用于技术探讨,任何资产的发行和炒作都与代码贡献者无关。NOTE仅仅是一个开源的技术项目。

随着NOTE协议的进一步开发和完善,可以预见将有更多基于此协议的真实应用诞生,这些应用将利用NOTE协议的独特功能和优势,在比特币以及更广泛的区块链领域创造新的价值和可能性。开源社区的持续贡献和协作精神是推动这一进程不可或缺的力量。

总结

NOTE协议代表了比特币网络向智能合约功能扩展的一个重要进展。通过在比特币这个最为原始和广泛使用的加密货币平台上引入智能合约,NOTE协议不仅增强了比特币的功能性,还为开发者和用户提供了前所未有的创新可能性。以下是NOTE协议的几个关键特点:

智能合约支持:NOTE协议通过智能合约扩展了比特币的应用范围,允许在比特币网络上创建和执行更复杂的逻辑和交易类型。这包括但不限于资产发行、去中心化金融(DeFi)应用、以及其他需要条件执行的场景。

基于UTXO的模型:与基于账户的智能合约平台不同,NOTE协议建立在比特币的UTXO模型之上,借力了比特币的安全性和高效率。

跨链功能:NOTE协议支持跨链交易,使数字资产能够在不同的UTXO链之间移动,进一步提高了其灵活性和应用范围。

真实世界的应用:NOTE协议支持先进的密码学技术,如零知识证明和Rabin签名算法,可以应用在更复杂的真实世界应用场景中。

低成本和高效率:通过优化数据存储和使用msgpack编码,NOTE协议旨在减少交易成本和提高网络效率。

开源和社区驱动:NOTE协议强调开源精神和社区的贡献,促进了技术的透明性和可信赖性,同时也鼓励了更广泛的开发和应用创新。

随着NOTE协议的发展和应用的深入,我们可以期待在比特币生态中出现更多创新的应用和服务,这些都将在保持比特币核心价值观的同时,为用户提供更丰富的功能和更好的体验。

NOTE协议

网站: https://noteprotocol.org

X: https://twitter.com/NoteProtocol

GitHub: https://github.com/NoteProtocol

NOTE协议草案问世

· 1分钟阅读

🚀 我们团队的激动人心的更新:我们设计了一种 #比特币 #第二层协议,专为 #UTXO 基础的区块链量身定做。这个协议不仅允许创建代币和NFT,还整合了可选的数据 #加密、#智能合约 和 #DID 定义,所有这些都在 MIT 许可证下。

🔬 第一部分已在 #BTC、#RXD 和 #BSV 网络上成功测试。#NFT/#代币/索引器功能即将完成,经过彻底验证以确保高安全标准后,计划于一月发布。

🌍 随着我们前进,我们邀请社区为这个不断进化的项目做出贡献。我们的目标是建立一个协议委员会,由贡献者组成,致力于推广和增强协议,确保它有效地服务于全球比特币社区。

🔧 在这一创新与合作的旅程中,你的参与至关重要。我们在这里支持利用这一协议的项目,促进一个安全而动态的区块链生态系统。

🔔 请保持关注详细更新,并成为塑造区块链技术未来的一部分。#区块链工程 #比特币协议 #去中心化创新 #开源未来

新年快乐大家!