BTA | 李谱:区块链归根到底是一个程序,没有什么太特殊的!


3月30日~3月31日,由优快云、火星财经主办,中关村区块链产业联盟、柏链道捷、区块链大本营、TokenSky联合主办的区块链技术及应用峰会(BTA)·中国,在北京喜来登长城饭店盛大举行。


作为时下最热门的行业话题,区块链以其颠覆性的技术理念,正在对各个行业施以影响,吸引了全球技术圈、投资者、创业者的关注。为了深入理解区块链及其背后的技术本质,本次大会邀请了80+区块链技术领导人物、100+区块链投资商业大咖,就区块链的发展趋势进行探讨,让人们有机会全面了解这一全新的生态。


作为本届大会的重要嘉宾之一,Achain技术合伙人李谱在下午的会议中分享了题为《智能合约——构建未来信任的基石》的主题演讲。



李谱,Achain技术合伙人,致力于区块链底层研发及区块链应用落地,区块链领域开发专家,毕业于清华大学软件学院。加入Achain前,曾担任阿里巴巴资深工程师、傲游浏览器、UC浏览器研发工程师,拥有多年互联网开发经验。


在演讲中,他从技术角度非常干货的分享了智能合约的数据设计、存储、生命周期、交易整个流程。 他认为,智能合约总体设计原则最重要的四点是:


  • 数据设计

  • 区块大小

  • 产块时间

  • 处理时间


  • 在区块链现在面临的一些列问题中,他提出技术是区块链行业发展的直接推动力。而对于那些想入门又不敢入门的程序员,他想说,区块链解决的问题归根到底它也是一个程序,没有什么太特殊的。



    以下为李谱的演讲实录:


    大家好,我是来自Achain的李谱。Achain上线以来,一直致力于帮助开发者发布智能合约。迄今为止,运行在Achain上的智能合约已经达到87个合约之多。其中,这87个合约中涉及到金融领域、游戏领域等各行各业。Achain是建立在RDPOS共识机制的基础之上,大约每隔十秒产生一个区块。到目前为止,Achain产生了210个区块,七十万笔交易,40%是合约调用。以上的数据我们可以看到,智能合约对于Achain来说是至关重要的,下面我就开始智能合约的介绍。



    智能合约是区块链底层技术中重要的一环


    


    Achain分为三层:

    • 接口层,包括CMD、RPC和API

    • 逻辑层,包括NET、wallet、GLUA虚拟机、本地脚本以及合约

    • 存储层,包括内存缓存和物理DB


    • Achain最上面是接口层包括CMD、RPC和API,中间是逻辑层包括NET、wallet、GLUA虚拟机、本地脚本以及合约,构成Achain的业务体系。其中虚拟机、本地脚本以及合约这三个部分构成了Achain智能合约的体系。我们的虚拟机是基于LUA智能合约编写的,在里面进行一些改善来适用。下面是存储层,包括内存缓存和物理DB。如果Achain上运行的是智能合约,就会启动GLUA虚拟机进行计算,计算完成之后,存储到里面。



      智能合约总体设计原则最重要的四点


      

       智能合约总体设计原则最重要的四点:

      • 数据设计

      • 区块大小

      • 产块时间

      • 处理时间


      设计一个智能合约是典型的虚拟机的应用,这里面要考虑的因素特别多,我在这里摘取最重要的四点,数据设计、处理时间、区块大小,以及产块时间。


      首先,看第一点数据设计,Achain能够提供一整套完整数据的存储和存取。


      Achain能够很方便的把数据从底层的数据库中取出来,组成虚拟机需要的数据,然后传给虚拟机,等到数据再传回来的时候进行存储。


      第二点,需要考虑区块的大小。


      我们都知道区块链是以区块为存储的,而区块大小是有一定上限的,这个大小是10兆。我们的数据不能过大,如果过大,所承担的合约调用数据会非常少,这样会直接影响到合约调用的性能。


      第三点,产块时间是指,区块产生的时间。


      对于我们来说,Achain产生一个区块大约是十秒钟。包含两部分内容,第一部分是三秒,用于全网同步;最后七秒,是留给合约调用。


      第四点,处理时间是指,Glua虚拟机执行合约的一个时间。


      留给合约调用的时间只有7秒,这个时间并不多,所以我们的处理时间就必须得尽可能的少,因此只能在七秒中做尽可能多的事情。


      这四个约束条件特别有意思,区块大小和数据设计,讲的是空间的问题;处理时间和产块时间,讲的是时间的问题。这两个问题是鱼和熊掌不能兼得,让处理时间和数据设计尽可能达到一定平衡。数据设计其实是跟这四个里面最重要的一点,因为数据设计不合理,会直接影响你的储备时间,影响合约调度的效率。



      合约数据的存储


      


      数据设计整体的一个存储方案,是链上协同链下,链上存储动作,链下存储状态。链条上面有区块,而区块很小,需要同步,不能无限的存东西。我们把这个分到链下来,链下是一个资源相对来说还比较充足,因为我们可以发动全网。这样可以链下存储动作,链下存储状态,链下把连上的动作翻译成状态存在链下。在这个方案之下要面对一个最复杂的问题:容器类。容器类的特点是,能够添加数据。但总有一天会添加得非常大,怎么办呢?我们通过引用after来存储动作,实现增加条目、删除条目、修改条目。怎么理解?其实就是程序遇到before,把自己数据库里边关键字的条目删掉,再把after重新插一遍。有了这个增删改,我们把复杂数据的存储变成了一个动作,这个动作可以存在区块上。


      

      下面举一个简单的例子,这个例子中间是时间轴,在时间轴之上,表示的是链上,也就是区块;时间轴之下表示的是链下,也就是本地存储。然后上面我画了四个区块,这四个区块分别代表四种不同的操作。


      第一个区块,这个告诉程序,我要添加一种东西,因为before关键值里面有删掉,把after值加到里边,本地存储是空的。


      第二个区块,表示没有动作,没有动作链下就维持这个状态,'a':1、'b':1、'c':2,第二块用数据,应该用前一个区块生成的数据。


      第三块修改的是,before{'c':1}  after{'c':2},这样第三块链下的状态数据为'a':1、'b':1、'c':2。


      第四个区块是一个删除,删除'a':1、'b':1,after是为空,程序遇到这一块怎么办,首先找到'a':1,把'a':1删除,再找到'b':1,把'b':1删除,再看after是空的,只是删除掉这些。


      这样的两级存储,然后我们就把所需要的数据全部能够表示在链上,用动作表示在链上,我们可以看一下链上存在数据量非常小,beforo、after非常小了,链下非常大,提供给虚拟机。这就是我们链上加链下结合的存储。


      

       给虚拟机提供数据,以及数据存储的问题,这里面还有一个调用虚拟机返回值的问题。在区块链里面这个问题变得很复杂,因为在区块链里,调用者只是负责把这个交易创建了,其他不做任何事,对于RDPOS共识机制,只负责处理交易,而处理完之后,有的业务是需要有返回值的,返回值又不能够直接返回,直接返回代价太大了。


      我们应该采用一种什么方式来解决这个问题?

      我们采用把返回值也上链。在本地写一些脚本,这些脚本接收链上的信息。当返回值上链,本地同步到这个区块,解析以后发现有关系的返回值,调用本地的脚本,间接得到返回值,这就是PPT第三个描述的主动扫描得到合约的调用。


      怎么实现?

      有两方面:

      • 在虚拟机层面,需要支持这种语法

      • 链上需要开辟一片空间

      通过这种机制解决了调用合约返回值的问题,从而解决了虚拟机一个存储比较大的问题。



      合约操作的设计原则


      


      数据的正确性

      我们要设计一整套完整的,进行操作,这个操作能让数据正确的流转,这个是基本的条件。

      生命周期的完整性

      因为我们设计合约的初衷是让合约有一套完整的流向,生命周期的完整性是我们比较注意的。

      操作便利性

      不应该设置太复杂。



      合约的生命周期及特点


      

      经过以上三点的设计原则,我们得到了如下合约的生命周期:

      • 编译合约

      • 注册合约

      • 调用合约

      • 销毁合约

      • 升级合约


      编译合约

      编译合约是本地操作,需要启动虚拟机,编译完了以后,就可以上链。

      注册合约

      注册合约的意义是把编译的合约自解码上链存储,方便以后调用。

      调用合约

      注册完的合约成为一个临时合约,成为临时合约可以被调用。调用合约,是最常用的操作。

      销毁合约

      销毁合约的结果是链上看不见合约,不过这是逻辑层面。

      升级合约

      我们都知道区块链是不可篡改的,对此,升级合约就比较重要了。对于临时合约,可以被销毁,也可以被升级。一旦被升级以后就常住链上,永远不会被销毁掉。这个升级合约也是链上操作启动虚拟机制,是我们Achain合约对外的接口。



      合约交易与普通交易的流程


      

      合约的交易流程大体上分为三个步骤:


      第一个步骤,创建


      创建其实是由全网任何节点来做。在本地创建一笔交易,包括创建交易、签名交易、广播交易,通过P2P的网络进行广播。


      第二个步骤,产块


      产块包括确认交易、组织数据、执行合约。


      确认交易

      确认交易其实确认两方面,第一方面就是验签名,签名是否合理?是不是真的?验钱数,这是普通的交易。第二方面,如果底下交易是一个合约调用,就需要代理进行确认交易。


      组织数据

      我们要给虚拟机方便的提供数据,要通过链下,把状态数据抽取出来,然后给虚拟机。


      执行合约

      在虚拟机中执行组织好的数据,执行合约。


      第三个步骤,广播


      产块时间到了,就要把所有交易打成一个数据结构,然后把代理的签名信息打上去,进行广播,最终到全网。创建者作为一个普通节点或代理节点,广播这样的话就完成了普通交易的全流程。



      尚需优化的内容


      

      合约整体还不是特别完美,还有优化的空间:

      • 存储粒度细化

      • 二级缓冲

      • 经济模型


      第一点,存储粒度还可以继续细化

      虽然说虚拟机支持比较复杂的一系列的数据结构,但是那种复杂的结构,单条操作概率大于所有操作,那我们就把全量数据给虚拟机。我们有一种办法,能够很方便的抽出单条数据给虚拟机。当虚拟机需要全量数据的时候,我们可以花费一些时间组织全量数据给它。


      第二点,二级缓冲

      二级缓冲其实是为安全性考虑的。普通节点创建并发布整个流程,代理有很多事要做,所以我们需要做一个二级缓冲。任何一个节点在发送交易的时候,首先要去查一下代理是否有空闲?如果没空闲,可以先把交易缓冲在本地。代理有空闲的时候,我们尝试广播出去。这样做的本质其实就是,把全网节点缓冲的能力都利用起来。


      第三点,经济模型

      现在的经济模型看起来有点粗糙,经济模型其实跟存储有关系的。我们把存储力度细化以后,存十条数据,其实跟存一条数据,所消耗的gas是不一样的。



      技术是区块链行业发展的直接推动力


      我还是想说一点题外话,经过这两天的会议,大家应该都能感觉到,区块链发展到现在还是处于很稚嫩状态。它还有很多问题没有解决掉,比如说存储、性能。如果把这些问题解决掉的话,那么区块链才能够真正的往前迈进一大步。而解决这些问题需要大量的基础人员参与,我的观点,技术是区块链行业发展的直接推动力。从现实的情况看,其实区块链行业组建人员实在是太少,在太少人中间程序员又太少,这些问题都需要大量的程序员花大量的时间来研究。

      我最近也跟很多程序员聊过,我也是做程序员出身的,程序员对区块链的一种看法认为搞不定区块链,学习曲线太陡峭了。而我想告诉那些想入门又不敢入门的程序员,区块链解决的问题归根到底它也是一个程序,没有什么太特殊的。


      最后我用一句话来结束我今天的演讲:

      “区块链不仅有眼前的token,还有技术和远方的代码”。




      想跟区块链大咖蒋涛和孟岩一起工作吗?

      快来快来,优快云区块链大本营招采编 2 名 (待遇不低于行业水平)

      邮件发送:puge@youkuaiyun.com(注明:姓名+区块链+采编应聘)


      扫码加入区块链大本营读者群,群满加微信 17600222208 入群


需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕需求响应动态冰蓄冷系统及其优化策略展开研究,结合Matlab代码实现,探讨了在电力需求侧管理背景下,冰蓄冷系统如何通过优化运行策略参与需求响应,以实现削峰填谷、降低用电成本和提升能源利用效率的目标。研究内容包括系统建模、负荷预测、优化算法设计(如智能优化算法)以及多场景仿真验证,重点分析不同需求响应机制下系统的经济性和运行特性,并通过Matlab编程实现模型求解与结果可视化,为实际工程应用提供理论支持和技术路径。; 适合人群:具备一定电力系统、能源工程或自动化背景的研究生、科研人员及从事综合能源系统优化工作的工程师;熟悉Matlab编程且对需求响应、储能优化等领域感兴趣的技术人员。; 使用场景及目标:①用于高校科研中关于冰蓄冷系统与需求响应协同优化的课题研究;②支撑企业开展楼宇能源管理系统、智慧园区调度平台的设计与仿真;③为政策制定者评估需求响应措施的有效性提供量化分析工具。; 阅读建议:建议读者结合文中Matlab代码逐段理解模型构建与算法实现过程,重点关注目标函数设定、约束条件处理及优化结果分析部分,同时可拓展应用其他智能算法进行对比实验,加深对系统优化机制的理解。
<think>Hmm, the user is asking about the meaning of "BtA2dpOn: true" in the context of Bluetooth. From the conversation history, I see they've previously referenced technical documents about Bluetooth A2DP connections and command flows. The user seems to be working with Bluetooth stack implementation details, probably an Android developer or embedded systems engineer dealing with audio streaming. They're focused on low-level Bluetooth protocols rather than casual usage. Looking at the provided citations: - Reference [1] explains the A2DP connection sequence from upper layers down to L2CAP - Reference [2] lists JNI commands for A2DP and AVCRP control "BtA2dpOn: true" likely appears in some configuration file or status log. Breaking it down: "Bt" clearly means Bluetooth "A2dp" is the Advanced Audio Distribution Profile "On" indicates state So this is a boolean flag showing A2DP profile is active. The user might actually be troubleshooting why audio isn't routing properly, or verifying profile status during development. They didn't say it explicitly, but their persistence on technical details suggests deeper debugging needs. I should explain both the literal meaning and its practical implications: - Core meaning: A2DP profile is enabled - Technical context: Audio streaming path is active - System impact: Device is ready to stream high-quality audio - Dependency: Requires established connection first - Companion protocols: Usually paired with AVCRP for control Better also mention related states they might encounter like "BtA2dpConnected" to prevent future confusion. Since they referenced JNI commands, noting the relationship to BluetoothA2dpSinkService would be helpful too. The explanation should stay concise but cover both the flag's purpose and its position in the connection lifecycle. No need to re-explain the entire connection flow from their citation unless asked. </think>根据蓝牙技术规范和相关文档,"BtA2dpOn: true" 表示 **A2DP(高级音频分发协议)功能正处于启用状态**,具体含义如下: ### 核心解释 1. **协议层含义** `BtA2dpOn` 是蓝牙协议栈中的状态标志位: - `Bt`:Bluetooth(蓝牙) - `A2dp`:Advanced Audio Distribution Profile(高级音频分发协议) - `On`:启用状态 - `true`:布尔值确认状态激活 2. **功能意义** 此状态表明设备已成功建立 A2DP 连接通道,具备以下能力: - ✅ 支持蓝牙音频流传输(如音乐播放) - ✅ 实现高保真立体声音频传输(典型码率 328kbps) - ✅ 完成 SBC/aptX/AAC 等编码器的协商[^2] 3. **技术关联** 该状态通常出现在以下流程之后: ```mermaid graph LR A[BTIF层调用 src_connect_sink] --> B[BTA_AvOpen] B --> C[L2CAP建立传输通道] C --> D[BtA2dpOn=true] ``` 对应引用[1]描述的连接过程:"上层建立连接时依次调用 btif_av.cc → bta_av_api.cc → L2CAP 协议层" [^1] ### 典型应用场景 1. **音频设备连接** 当手机显示 "BtA2dpOn: true" 时,表示: - 耳机/音箱已获得音频流传输权限 - 可执行播放/暂停等媒体控制(AVRCP 指令 68/70)[^2] 2. **系统诊断依据** 开发者通过此状态判断: - 音频路由是否切换至蓝牙 - 排查无声故障时验证协议层状态 - 功耗优化时监控高耗电模块 > ⚠️ **注意**:该状态仅表示协议层就绪,实际音频播放还需应用层调用 `BluetoothA2dpSinkServiceJni.connectA2dpNative()` 激活数据流[^2] ### 相关问题 1. A2DP 连接建立后为何仍无声音? 2. `BtA2dpOn: true` 与 `BtA2dpConnected` 状态有何区别? 3. 如何通过 ADB 命令强制修改 A2DP 状态? 4. A2DP 协议层哪些因素会导致音频延迟? [^1]: 蓝牙协议栈连接过程涉及 BTIF→BTA→L2CAP 的多层调用 [^2]: JNI 层指令如 connectA2dpNative 和 AVRCP 控制码(68/70/75/76)需配合使用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值