一、合约规划是什么意思?
合约规划是指项目目标成本确定后,对目标成本按照自上而下、逐级分解的方式,以合同为口径进行分解编制的成本体系,对项目全生命周期内发生的所有合同进行界面划分并对所对应的金额进行预估。合约规划也可以理解为以预估合同的方式对目标成本的分级,将目标成本控制科目上的金额分解为具体的合同。合约规划也是制定项目招投标计划的基础,根据合约规划编制年度或月度招投标计划,并根据合约规划分解的目标成本,控制合同价。------(重庆衡泽软件科技有限公司)
二、主机厂是什么意思
在汽车制造业中,主机厂是什么意思?主机厂是汽车行业中的重要角色,扮演着汽车整车制造的核心地位。在汽车工业中,主机厂一般是指能够自主设计、生产和销售整车的汽车制造厂家,他们通常具备完整的汽车制造能力,包括车身设计制造、发动机制造、底盘制造等。主机厂通常会与各种零部件供应商合作,来生产出完整的汽车产品,最终交付给消费者。
主机厂的意义
主机厂在汽车产业链中扮演着至关重要的角色。作为整车制造商,主机厂不仅决定了汽车产品的质量和性能,更直接影响着整个产业链的发展。主机厂的研发能力、生产能力和市场竞争力,直接决定了企业在市场上的地位和发展空间。
主机厂的特点
- 技术领先:主机厂通常拥有一流的技术研发团队和先进的生产设备,能够持续提升产品的技术含量和竞争力。
- 品牌影响力:主机厂的品牌通常拥有较高的知名度和良好的口碑,能够吸引更多消费者选择购买其产品。
- 产业链整合:主机厂通常会整合汽车产业链上下游资源,构建完善的供应链体系,提高生产效率和产品质量。
- 市场竞争力:主机厂在市场上的竞争力决定了企业的生存空间和发展前景,可以通过不断创新和提升产品性能来提升市场竞争力。
主机厂的发展趋势
随着汽车行业的不断发展,主机厂也在不断探索和发展新的模式和技术,以适应市场的变化和需求。未来,主机厂的发展趋势主要表现在以下几个方面:
- 智能化:随着人工智能和大数据技术的发展,主机厂将更加注重智能化制造和智能驾驶技术的研发和应用。
- 新能源:主机厂将加大对新能源汽车的研发和投入,推动汽车行业向清洁能源的转变。
- 互联网+:主机厂将更加注重互联网技术的应用,推动汽车制造与互联网技术的深度融合。
- 定制化:随着消费者需求的个性化和多样化,主机厂将更注重定制化生产,提供更符合消费者需求的个性化汽车产品。
结语
主机厂是汽车行业中的关键角色,其发展和变革直接影响着整个汽车产业链的发展方向。随着社会的发展和技术的进步,主机厂将不断探索和创新,推动汽车行业向着更加智能化、绿色化和定制化的方向发展。
三、ns主机是什么意思
当您开始探索互联网世界时,可能会遇到一些新的术语,比如ns主机是什么意思。在这篇文章中,我们将深入探讨这个话题,帮助您更好地理解这个概念。
什么是ns主机?
ns主机其实指的是“域名服务器”(Name Server),它是负责将域名解析为IP地址的服务器。换句话说,当您在浏览器中输入一个网址时,计算机需要通过ns主机来找到相应的IP地址,从而能够访问该网站。
一般来说,每个域名都需要至少两个ns主机,一个作为主服务器,另一个作为备份服务器。这样可以确保网站在某个ns主机出现问题时,仍然能够正常访问。
ns主机的重要性
ns主机在互联网中扮演着非常重要的角色,它直接影响着网站的访问速度和稳定性。一个快速响应的ns主机可以加快网站的解析速度,提升用户体验。
此外,良好的ns主机设置还可以提高网站的安全性,防止遭受DNS劫持等网络攻击。因此,选择一个可靠的ns主机服务商至关重要。
如何选择合适的ns主机?
在选择ns主机时,有几个关键因素需要考虑:
- 稳定性:确保ns主机服务商拥有高可靠性的服务器和网络设备,避免造成网站访问故障。
- 速度:选择具有优质网络提供商接入的ns主机,以确保网站能够快速加载。
- 安全性:关注ns主机服务商的安全措施,防止网站数据泄露或遭受攻击。
- 技术支持:选择提供24/7技术支持的ns主机服务商,以便在出现问题时能够及时解决。
通过综合考虑以上因素,可以选择适合自己网站需求的ns主机,从而提升网站的性能和安全性。
总结
ns主机在互联网世界中扮演着重要的角色,它不仅影响着网站的访问速度和稳定性,还直接关系到网站的安全性。因此,在建立网站时,选择一个可靠的ns主机服务商是至关重要的。
希望通过本文的介绍,您对ns主机是什么意思有了更清晰的认识,也能够更好地选择适合自己的ns主机,为网站的发展保驾护航。
四、主机reset是什么意思
在网络世界中,我们经常会遇到一些技术术语,有些我们可能已经习以为常,而有些可能会让我们感到困惑。其中一个技术术语就是"主机reset",你或许曾经听说过它,但是你是否真正理解它的含义呢?本文将为你解释"主机reset"的定义、作用以及常见使用场景。
主机reset是什么意思?
首先,让我们来理解"主机reset"的含义。"主机reset"是指在计算机网络中对主机进行重置或重新启动的操作。当主机reset时,它会被断开与网络的连接,并重新初始化自身。这个过程通常包括关闭和打开计算机、清除内存和网络缓存以及重新加载操作系统。
主机reset操作可以通过多种方式进行,例如通过物理按钮、操作系统的命令或者远程管理工具。具体的操作方法取决于主机的硬件和操作系统。
主机reset的作用
那么,为什么我们需要执行主机reset操作呢?主机reset有以下几个作用:
- 修复系统错误:主机reset可以清除操作系统和应用程序中的错误状态,重新启动系统后通常可以恢复正常运行。
- 清除缓存和临时文件:在使用过程中,主机会生成大量的缓存和临时文件,这些文件可能会占用大量的存储空间并导致系统变慢。通过reset,可以清除这些文件,恢复系统的正常速度。
- 更新软件和驱动程序:在重置过程中,系统会重新加载操作系统和应用程序,这有助于更新软件和驱动程序,提供更好的性能和安全性。
- 解决网络问题:有时主机可能会遇到与网络连接相关的问题,比如无法连接到无线网络或者无法访问特定的网站。通过reset,可以重新建立网络连接,解决这些问题。
- 应用新的设置:如果你对主机的某些设置进行了更改并希望使其生效,你可以执行reset操作。这将使设置恢复到默认或预设值,并应用新的设置。
主机reset的常见使用场景
现在我们已经了解了主机reset的定义和作用,让我们来看看它在哪些场景下常见使用。
1. 硬件故障
当主机遇到硬件故障时,重置可能是解决问题的一种方法。例如,如果你的计算机无法启动或频繁崩溃,可能是硬件故障引起的。通过主机reset,系统可以重新初始化硬件并尝试修复问题。
2. 病毒或恶意软件感染
如果你怀疑自己的主机感染了病毒或恶意软件,主机reset可以是清除感染的一种方式。重置将清除系统和应用程序中的恶意文件,恢复主机的安全性。
3. 系统性能下降
当你的主机变得缓慢或出现其他性能问题时,执行reset操作可以帮助解决这些问题。通过清除缓存和临时文件,重置可以恢复主机的正常速度。
4. 网络连接问题
有时你的主机可能无法连接到互联网或特定的网络资源。在这种情况下,主机reset可以重新建立网络连接,并解决这些连接问题。
5. 系统设置更改
如果你在主机中进行了一些设置更改,但是想回到默认或预设值,你可以执行reset操作。这将恢复设置,并应用新的更改。
综上所述,"主机reset"是指对主机进行重置或重新启动的操作。它有助于修复系统错误、清除缓存和临时文件、更新软件和驱动程序、解决网络问题以及应用新的设置。无论是在硬件故障、病毒感染、系统性能下降、网络连接问题还是系统设置更改的情况下,主机reset都可以作为解决问题的一种方法。
希望本文对你理解"主机reset"有所帮助。如果你有任何其他关于主机reset的问题或疑惑,欢迎在下方留言,我将尽力为你解答。
五、主机号是什么意思
在网络世界中,主机号是什么意思一直是一个备受关注的话题。主机号是指互联网中的主机标识,它类似于一个房屋的地址,用于唯一标识互联网上的设备,使其能够被其他设备识别和访问。了解主机号的含义对于网络安全、网络配置以及网络通信都具有重要意义。
主机号的定义
主机号是指IP地址中的一部分,用于标识特定网络中的主机或设备。在IPv4地址中,IP地址通常由网络号和主机号组成,网络号用于标识一个网络,而主机号则用于标识该网络中的特定主机或设备。主机号的作用在于对网络中不同的设备进行区分,确保数据能够准确地发送和接收。
主机号的作用
主机号在网络通信中起着至关重要的作用。通过主机号,数据包能够准确地路由到目标主机,实现设备之间的通信。主机号还可以帮助网络管理员对网络中的不同设备进行管理和监控,确保网络运行的稳定性和安全性。此外,主机号还可以用于识别特定设备的服务和功能,实现网络资源的共享和管理。
如何确定主机号
确定主机号的方法取决于所使用的IP地址类型。在IPv4地址中,主机号的长度取决于网络的子网掩码,通常由32位的IP地址分成网络号和主机号两部分。在IPv6地址中,主机号的长度为64位,用于标识特定设备。
在配置网络设备时,通常需要指定主机号,以确保设备能够正确地接收和发送数据。网络管理员可以根据网络拓扑和设备需求来选择适当的主机号,确保网络中的设备能够顺利通信。
主机号的重要性
主机号作为IP地址的一部分,直接影响着设备之间的通信和数据传输。正确配置主机号可以避免网络中的冲突和混乱,确保数据能够准确地发送和接收。通过合理管理和分配主机号,可以提高网络的性能和安全性,确保网络运行的稳定和顺畅。
在网络安全方面,主机号的正确配置可以帮助网络管理员监控设备的活动,并及时发现异常情况。通过对主机号进行监控和管理,可以提高网络的安全性,防止未经授权的访问和攻击。
结论
综上所述,主机号是什么意思是网络中一个重要的概念,它用于标识和区分网络中的不同设备,确保数据能够准确地传输和接收。了解主机号的定义和作用对于网络配置和管理至关重要,可以帮助网络管理员优化网络结构,提高网络性能和安全性。因此,在配置网络设备和管理网络时,务必重视主机号的设置和管理,以确保网络的正常运行和安全通信。
六、dmz主机是什么意思
近年來,隨著網絡技術的不斷發展和普及,人們對於網絡安全的關注度也越來越高。在網絡安全領域中,DMZ主機被廣泛應用,但對於普通用戶來說,其概念可能不太清晰。下面我們將從不同角度來解釋DMZ主機是什麼意思,幫助大家更好地理解和應用這一技術。
一、DMZ主機的基本概念
DMZ全稱為Demilitarized Zone,直譯為「非軍事區」,在網絡安全領域中指的是一個處於內部網和外部網之間的中間區域。DMZ主機則是位於DMZ區域的伺服器,用於處理外部網絡和內部網絡之間的數據通信。通常,DMZ主機部署在防火牆內外的邊界位置,既可以跟外部網絡通信,也可以與內部網絡進行通信。
簡單來說,DMZ主機扮演著一個橋樑的角色,既可以保護內部網絡的安全,又可以使得外部用戶能夠訪問特定的內容或應用。因此,在設計網絡架構時,合理配置DMZ主機至關重要。
二、DMZ主機的作用
那麼,DMZ主機到底有什麼作用呢?它主要具有以下幾個方面的功能:
- 1. **分隔內外網**:DMZ主機通過位於防火牆內外的位置,將內部網和外部網有效地分隔開來,防止外部攻擊對內部系統造成威脅。
- 2. **提供服務**:DMZ主機可以為外部用戶提供特定的服務和應用,如郵件伺服器、網頁伺服器等,同時保護內部網絡的安全。
- 3. **監控流量**:DMZ主機可以監控進出內外網的流量,檢測潛在的安全威脅,有效保障網絡系統的安全性。
總的來說,DMZ主機的作用不僅在於加強網絡安全防護,同時還能提供更靈活和高效的網絡服務。
三、如何正確配置DMZ主機
正確配置DMZ主機對於網絡系統安全至關重要。在進行配置時,應該注意以下幾個方面:
- 1. **設置防火牆規則**:通過合理設置防火牆規則,限制DMZ主機與內部網絡的通信,防止橋接攻擊。
- 2. **加密數據傳輸**:對於DMZ主機與外部網絡之間的數據傳輸,應該加密傳輸,防止敏感信息被竊取。
- 3. **定期更新漏洞**:及時更新DMZ主機的系統和應用程序,修補可能存在的安全漏洞,提高系統的安全性。
只有通過合理配置和管理,才能確保DMZ主機的安全性和穩定性,為網絡系統提供有效的保護。
四、結語
通過以上的介紹,相信大家對DMZ主機是什麼意思有了更清晰的認識。作為網絡安全領域中重要的一環,DMZ主機的作用不可忽視,正確應用和管理將有助於提高網絡系統的安全性和效率。
希望本文能夠幫助您更好地理解和應用DMZ主機,保障網絡系統的安全運行。
七、交换主机是什么意思
当谈到网站托管和服务器技术时,常常会听到“交换主机是什么意思”这个问题。在互联网世界中,服务器托管是网站正常运行的关键,而虚拟服务器交换也成为了许多网站管理员的选择。那么,交换主机是什么意思?我们需要从根本概念开始解释。
交换主机定义
交换主机是指将一个网络上的主机的一个或多个程序或内容复制到另一台主机上的过程。这种类型的主机交换通常是通过网络完成的。
在现代网络环境中,交换主机通常指的是虚拟专用服务器(VPS)的交换。虚拟专用服务器提供了一个独立的虚拟操作系统实例,可以在一台物理服务器上同时运行多个 VPS。这种交换主机的模式使得用户可以获得更多的弹性,以满足不同的需求。
交换主机的优势
与传统的独立服务器相比,交换主机有许多明显的优势。首先,交换主机通常成本更低。由于多个 VPS 共享一台物理服务器,成本分摊给每个用户,使得交换主机的价格更加实惠。
其次,交换主机提供更高的可扩展性。用户可以根据需要轻松升级或降级他们的服务器实例,而无需重新购买新的硬件设备。这种灵活性使得交换主机成为许多中小型企业和个人网站所有者的理想选择。
此外,交换主机还提供更好的安全性。每个 VPS 都有独立的操作系统实例和资源分配,使得用户之间相互隔离,减小了安全风险。
交换主机的运作方式
交换主机的运作方式相对简单,但需要一定的技术知识。通常,用户可以通过虚拟主机控制面板来管理他们的 VPS。控制面板提供了一个图形化界面,用户可以进行服务器配置、监控和维护。
通过控制面板,用户可以轻松管理他们的 VPS,包括安装软件、配置网络设置、监控资源使用情况等。这种方式使得交换主机操作更加直观和简便。
交换主机的选择要点
在选择交换主机提供商时,有几个关键要点需要考虑。首先是性能和可靠性。确保选择一个可靠的提供商,提供高性能服务器和稳定的网络连接。
其次是灵活性和扩展性。考虑您未来的需求,选择一个提供弹性资源管理的交换主机服务商。
另外,安全性也是非常重要的。确保提供商有一套完善的安全措施,保护您的数据和服务器不受攻击。
结论
总而言之,交换主机是什么意思,从根本上来说,它是网络系统中将程序和内容从一个主机复制到另一个主机的过程。在当今数字化时代,虚拟专用服务器的交换成为了许多网站管理员的首选,带来了更多的优势和便利。
选择合适的交换主机服务商,关注性能、可靠性、灵活性和安全性等要点,可以帮助您更好地管理网站和服务器,确保其正常运行和安全性。
八、宿主机是什么意思
宿主机是什么意思
在计算机科学领域,宿主机是一个重要的概念。它通常指的是一台物理计算机或服务器,用于托管虚拟机或容器实例。在虚拟化和云计算环境中,宿主机扮演着至关重要的角色。
宿主机的概念源自虚拟化技术的发展。通过在一台物理服务器上运行虚拟化软件,可以创建多个虚拟机实例,每个实例都可以独立运行不同的操作系统和应用程序。这些虚拟机运行在宿主机上,共享物理服务器的资源,如处理器、内存和存储等。
在容器技术中,宿主机也扮演着类似的角色。容器是一种轻量级的虚拟化技术,可以更快速地部署应用程序,而无需启动完整的虚拟机。容器运行在宿主机的操作系统内核上,共享操作系统的资源,因此更加轻量级和高效。
宿主机的功能和作用
宿主机在虚拟化和容器化环境中发挥着重要的功能和作用:
- 资源分配:宿主机负责管理和分配物理服务器的资源给虚拟机或容器实例,确保它们能够正常运行并共享资源。
- 隔离性:宿主机通过虚拟化技术或容器技术实现虚拟机或容器之间的隔离,确保它们的运行环境互相独立,提高安全性。
- 性能优化:宿主机可以根据实际负载情况对资源进行动态调整,优化系统性能,提高整体的利用率。
- 扩展性:通过在宿主机上运行多个虚拟机或容器实例,可以更好地利用物理服务器的资源,实现系统的横向扩展。
宿主机的部署和管理
为了充分发挥宿主机的作用,需要对其进行有效地部署和管理:
- 选择合适的硬件:宿主机的性能和稳定性直接受物理服务器硬件的影响,因此需要选择性能良好和可靠的硬件设备。
- 安装虚拟化软件或容器引擎:为了创建虚拟机或容器实例,需要在宿主机上安装相应的虚拟化软件或容器引擎,如VMware、KVM、Docker等。
- 配置网络和存储:宿主机需要与网络和存储设备相连,确保虚拟机或容器实例能够访问外部网络和存储资源。
- 监控和管理:定期监控宿主机的运行状态和资源利用情况,及时调整配置和处理异常情况,以保证系统的稳定性和性能。
总结
在当今信息技术快速发展的时代,宿主机作为虚拟化和容器化技术的基础,发挥着重要的作用。通过合理部署和管理宿主机,可以实现资源的最大化利用,提高系统的灵活性和可靠性,进而推动企业的数字化转型和创新发展。
九、云主机是什么意思
云主机是什么意思
云主机是当今互联网时代的一个重要概念,它的出现极大地改变了传统的服务器架构和资源管理模式。云主机指的是一种基于云计算技术的虚拟服务器,通过将服务器的硬件资源进行虚拟化,将其部署在云端的服务器集群中,用户可以根据自身需求弹性地调配计算、存储、网络等各种资源,实现按需付费的服务模式。
相对于传统的物理服务器,云主机具有诸多优势。首先,云主机的灵活性更高,用户可以根据实际需求随时调整服务器配置,而不需要购买新的硬件设备。其次,云主机具有更好的可靠性和稳定性,因为数据存储在云端,一旦某台服务器出现故障,系统会自动将数据迁移至其他正常的服务器,确保服务不中断。此外,云主机还具有高可用性、安全性和可扩展性等特点,逐渐成为各行各业的企业和个人用户首选的服务器解决方案。
随着云计算技术的不断发展和普及,云主机的应用范围也越来越广泛。从个人网站、博客到大型电子商务平台、金融机构,都可以通过云主机来搭建自己的服务器环境。对于企业来说,使用云主机可以大大降低服务器运维成本,提高IT资源利用率,加快业务应用部署的速度,带来更好的用户体验和服务质量。
云主机的优势
云主机相比于传统物理服务器有很多优势,主要可以总结为以下几点:
- 弹性扩展:用户可以根据业务需求随时扩展或缩减服务器资源,无需购买新的硬件设备。
- 高可用性:云主机部署在集群环境中,一台服务器出现问题不会影响服务正常运行。
- 灵活性:用户可以根据不同的需求选择不同的配置方案,实现资源的灵活配置。
- 安全性:云主机提供多重安全防护机制,确保数据的安全性和隐私保护。
- 成本效益:相比传统服务器,云主机的使用成本更低,节约了IT运维成本,降低了业务运营风险。
云主机的部署方式
根据不同的需求和应用场景,云主机可以分为公有云、私有云和混合云:
- 公有云:由第三方云服务提供商建设和维护,多租户共享资源,适合中小型企业和个人用户使用。
- 私有云:由单个组织或企业搭建,资源独立不共享,更适合对数据安全和合规性要求较高的企业使用。
- 混合云:将公有云和私有云进行混合部署,实现公有云和私有云资源的互补和融合,更好地满足企业灵活性和安全性方面的需求。
不同的部署方式适用于不同的用户群体和应用场景,用户可以根据实际需求和情况选择最适合自己的云主机部署方式。
云主机的未来发展
随着云计算技术的迅速发展和普及,云主机作为云计算的基础设施之一,未来的发展前景十分广阔。未来,云主机将会朝着更加智能化、自动化和智能化方向发展,通过人工智能、大数据等新技术的应用,进一步提高云主机的资源利用率、性能和安全性。
同时,随着5G、物联网、边缘计算等新兴技术的快速发展,云主机也将在跨界融合、边缘智能计算等方面发挥重要作用,为各行各业带来更多创新和机遇。未来,云主机将成为数字化转型的重要基石,为企业提供更快速、更安全、更便捷的云端服务。
结语
总的来说,云主机是一个十分重要的概念和技术,它已经成为当前互联网时代的重要基础设施。通过灵活的部署方式、多样化的配置选择,云主机为用户提供了更高效、更安全、更可靠的服务器解决方案。随着云计算技术的不断进步和完善,相信云主机在未来一定会发挥更加重要和关键的作用,为各行各业带来更多的发展机遇和竞争优势。
十、以太坊的智能合约是什么意思?
尽管以太坊是第一个拥有图灵完备智能合约的平台,但已经有可能使用一种称为「比特币脚本」(Script)的语言在比特币上创建基本合约。而比特币现金最近一直在改善其智能合约功能。尽管不如以太坊先进,但它们都以自己独特的方式和优势支持链上智能合约的存在。
本文重点介绍这三个平台上智能合约之间的突出区别。由于关注的重点是智能合约和脚本功能,因此在此不会讨论平台或区块链的基础知识。本文还特此介绍了链上智能合约,以及存在几种第二层智能合约解决方案,例如 RSK。这些解决方案绝对值得讨论,碍于篇幅不做非常深入的研究。
以太坊:自有状态且图灵完备
以太坊是迄今为止最大的智能合约平台,其智能合约使用以太坊虚拟机(EVM)实现,这是一个图灵完备的虚拟机。这意味着只要有足够的资源,EVM 就可以计算任何东西。从概念上讲,这与许多其他通用平台(例如 Java 虚拟机 JVM)相似,该平台用于执行 Java 程序。
解释 EVM
不过那些通用平台与以太坊的 EVM 之间的最大区别在于,以太坊的智能合约代码由所有以太坊节点执行,以验证交易的有效性。为了奖励节点执行此代码,所有 EVM 操作码均具有相关的燃气成本,如下图所示。
图:EVM 费用结构
每笔交易都会花费大量的 Gas,具体取决于所使用的操作码。用以太坊的原生加密货币 ETH 支付 Gas 费用。为了限制这些节点每个区块必须执行的计算量,单个区块中可以使用的 Gas 量有一个限制,称为「区块 Gas 限制」。
在执行智能合约功能期间,合约可以存储和访问必要的数据。根据其用途,这些数据可以存储于不同的位置,即位于不同的数据位置。首先是「堆栈」(stack),其中包含计算中使用的值。只能轻松访问堆栈中的前 16 个项目,因此不适合长期存储。下面显示了使用堆栈进行计算。
图:基于堆栈的计算
其次,为了补充堆栈,「contract memory」可用于在当前合约执行过程中存储、检索和传递数据。可以从内存中检索这些值,以将其用于堆栈上进行计算,并将结果存储回内存中。这些值仅在当前执行期间持续存在。在合约执行结束时,将擦除 contract memory 内存和堆栈。
最终,数据所在的位置是「 contract storage」,用于在合同执行期间持久保存数据。持久性变量(如 token 余额)存储在合约存储中。为了实现数据持久性,contract memory 存储在每个以太坊节点上。因此,其内存类似于 RAM,而存储类似于硬盘驱动器或持久数据库。
更多以太坊虚拟机如何工作的细节可参见 MyCrypto 的文章。
编写智能合约
尽管所有智能合约都使用 EVM,但大多数智能合约不是使用 EVM 字节码手工编写的,就像大多数 JVM 字节码不是手工编写的一样。相反,有几种高级语言可用于在以太坊中编写智能合约,最受欢迎的语言是 Solidity,除此之外还出现了 Vyper,也是一种面向 EVM 的编程语言。下图包含一个非常简单的 Solidity 智能合约的示例。
与智能合约互动
以太坊中的智能合约作为字节码存在于以太坊网络上。这意味着将 Solidity 代码编译为字节码,然后通过发送部署交易(deployment transaction)将其部署到网络。这是一种特殊的交易,没有任何接收者,但以字节码作为交易数据。
这些部署的合约仅以 EVM 字节码的「碎片」形式存在于网络中,几乎无法单独使用。为了与它们进行「接头」,需要提供一个应用程序二进制接口(ABI),其中包括所有公共功能及其参数的列表。为了使用户对这些合约有更多了解,Etherscan之类的服务帮助可以验证合约源代码,以便用户可以在使用合同之前检查代码。
通过连接到以太坊节点并使用其JSON-RPC 接口,可以直接访问所有智能合约。但是,许多智能合约却是通过连接到节点并管理 ABI 的前端应用程序访问的。这可以通过众多不同的以太坊 SDK (例如 web3.js 或 ethers.js)之一来完成,它们可以在后台调用 JSON-RPC。这为合约用户提供了更好的体验,相当于最困难的部分被形象化了。
可以通过两种不同的方式与智能合约进行交互:调用(Calls)和交易(Transactions)。调用是合约功能的本地调用,它不会向区块链广播任何内容。因此,调用过程是「只读」的,不能对合约状态进行任何更改,也不会产生任何费用。而交易是实打实的「写入操作」,确实会广播到网络,并包含在区块链中,并且会产生矿工费用。以 ERC20 令牌为例,通过调用检索 token 余额,同时通过发动交易转移令牌。
智能合约间互操作
以太坊的这些属性(具有图灵完备的 EVM 和持久性存储)允许创建在链上运行的任何类型的去中心化应用程序。一个很好的例子就是 DeFi 生态系统,其中包括 Maker,Uniswap 和 Compound 等应用程序,以及 ERC20 和 ERC721 令牌标准。这些应用程序允许具有无限数量的动态参与者的复杂功能。
图:rDai 中的 DeFi 互操作性
最重要的是,智能合约本身可以成为其他智能合约的「参与者」,从而实现这些合约之间的强大集成和组合。比如,持有代币余额并将其借给 Compound 或与 Uniswap 交易所的智能合约,或者是使用 rDai 自动投资 DAI 并将应计利息贡献给慈善机构。
尽管智能合约可以彼此交互,但是链上的每个交易都必须来自外部帐户。因此,以太坊智能合约间的交互仍然必须由用户通过初始交易来触发。在此初始触发之后,合约间的交互类似于直接访问。
换句话说,某个智能合约可以调用其他智能合约的「只读功能」或触发「写入操作」(交易)。由于只有外部帐户才能触发交易,因此智能合约之间的交易称为内部交易或消息调用,以与用户启动的交易区分开。
比特币:无状态且简单
所有比特币交易(包括定期转账)均由基于堆栈的、被称为「比特币脚本」(Script)的编程语言支持。上文提到以太坊的 EVM 是为图灵完备且可互操作的智能合约而设计的,而比特币脚本却有意添加各种限制,并且以根本不同的方式工作。
解释比特币脚本
就想 EVM,比特币脚本使用堆栈(Stack)来保存值(Value)并在这些值上执行计算。但与 EVM 不同的是,堆栈是比特币脚本中唯一可用的数据位置。这意味着,很难存储多个值以便在以后的合约执行中使用。更重要的是,这意味着不可能存储或修改那些在合约执行期间仍存在的值(但 EVM 可以)。
这是以太坊的智能合约和比特币的最大区别。以太坊的模型是有状态的,而比特币是无状态的。通俗理解就是,以太坊可以被认为类似于普通的命令式可变数据编程范例,而比特币则类似于功能不变的数据范例。
比特币的模型允许独立且高效得多地验证交易,这使得并行化和分片交易更加容易。但是,如果没有任何可变的数据存储,在比特币上创建像以太坊那样的复杂智能合约就更加困难,比如,ERC20 合约必须跟踪代币余额并进行更改。
除了这些状态差异之外,还有其他一些因素限制了比特币智能合约的复杂性。值得注意的是,比特币脚本缺乏对某些算术函数以及任何形式的循环或递归的支持。其合约还具有 520 个字节的有效大小限制,并且最多只能包含 201 个操作码。
比特币上的大多数智能合约都属于几类简单合约。例如,可以由多个参与者使用的多重签名合约,或哈希时间锁定合约(HTLC)。
头等仓小知识:关于哈希锁定,可以举一个简单的例子,比如你从我这儿买一段视频,这个视频通过密码访问,那么在交易合约中,我把视频的访问密码也变成其中的一个 key,如果要达成交易,这个 key 必须让你知道;而一旦你知道(你拿到视频),钱就支付给我了,并且整个交易过程一定要在设定好的时间内完成,超出时间则合约也将自动触发。
而且由于比特币上的这些合约非常简单,大多数价值是通过将不同的合约与其他脱链应用程序逻辑相结合而捕获的。这样,可以将简单的合同组合起来以创建复杂的解决方案,例如闪电网络或跨链拍卖等等。
解释比特币交易
比特币每一笔交易都是通过所谓的「交易输出」实现的。当这些交易输出在某个账户中可用,它们就被称为未用交易输出(UTXOs)。这些 UTXOs 被锁定脚本(或 scriptPubKey)锁定,并被指定好了使用条件。尝试使用 UTXOs 时,会提供一个解锁脚本(或 ScriptSig),然后这些脚本一起执行计算。仅当脚本执行无错误且结果值为正确(TRUE)时,交易才生效。
与 EVM 一样,所有比特币节点都执行这些脚本来验证交易,但是比特币区块链并没有 Gas 成本的概念,因此,按交易数据的每个字节向矿工支付费用。为了限制节点必须完成的工作量,在一些更密集的脚本操作上也加入了一些限制。
与智能合约互动
比特币中的智能合约的编写使用P2SH 模式(头等仓注:有翻译为「向脚本哈希支付」)。P2SH 模式中的锁定脚本包含脚本哈希,并且需要提供完整脚本(称为赎回脚本)以及该赎回脚本的解锁脚本的解锁脚本。下图显示了这种模式。
图:P2SH 模式
头等仓小知识:P2SH 模式是为了简化复杂脚本的运用而被引入的(传统机制是 P2PKH),将复杂的锁定脚本编译成一个含有 20 个字节哈希的简单脚本,就想比特币地址是基于 Base58 编码的一个含有 20 个字节的公钥。P2SH 跟传统 P2PKH 方式的最大区别是把设置转出条件的人从发送者变成接收者。通过在赎回脚本中添加各种转出条件可以来实现形式多样的交易,例如多重签名交易。
比特币节点分两个阶段验证这些智能合约交易。首先,对「赎回脚本」进行哈希处理,并对照「锁定脚本」中的哈希值进行检查。如果它们匹配,则用「锁定脚本」去解锁「赎回脚本」,就好像「赎回脚本」才是初始的锁定脚本一样。
因为只有字节码的哈希值存储在比特币链上,所以完整的字节码必须存储在链外,并包含在任何合同执行的解锁脚本中。因此,比特币智能合约的「部署」是免费的,但以后执行合约的成本更高。相反,以太坊的初始部署相对昂贵,而后来的合约执行则便宜。
这些部署上的差异鼓励综合使用这两种智能合约。一个很好的例子是 LocalCryptos,它支持以太坊和比特币的非托管本地交易。对于以太坊,它使用一个大的智能合约来跟踪所有交易,而对于比特币,它为每笔交易创建单独的合约。
编写智能合约
虽然以太坊有多种高级语言可以编译为 EVM 字节码,但比特币对此的关注较少。尽管可以用比特币脚本构建的系统很复杂,但是合约本身通常很简单。因此,几乎没有必要抽象出底层系统。而且由于比特币合约有大小限制且每增加一个字节的高昂成本,因此保证合约「尽可能小」很重要。
尽管这些高级语言在比特币中不太重要,但它们确实存在。Ivy 是比特币中「最精致」的高级语言,该语言由 Dan Robinson 于 2017 年创建。下图给出了一个用 Ivy 编写的智能合约示例。如果接收者未及时使用该合同,则该合约可用于发送可以由发送者收回的款项。
最近,Blockstream 的几位研究人员发布了 Miniscript,该语言专注于智能合约的分析和可组合性,而不是抽象底层系统。考虑到比特币合约往往缺乏抽象的复杂性,这似乎是正确的道路。
比特币现金:可组合功能
上文一方面是以太坊,它能够创建许多功能强大且有用的智能合约,这些合约完全存在于以太坊链上,同时,由于其有状态(Stateful)的性质,它还提出了扩展性问题。另一方面,比特币的智能合约无状态(Stateless)模型允许对智能合约交易进行独立,简单的验证,但是其脚本系统限制了合同的实用性。
在分叉之前,比特币现金(Bitcoin Cash)和比特币拥有相同的历史,因此它们的底层脚本系统在功能上是相同的,比特币现金也受益于这些相同的方面。从那时起,比特币现金社区的很大一部分就认识到了对「更有用的智能合约」的需求。比特币现金启用了新功能,使其智能合约更有用,同时保留了允许比特币进行无状态验证的基本属性。
BCH的功能升级
要了解比特币现金智能合约的可能性,我们需要查看其半年两次的网络升级。自 2017 年最初的硬分叉以来,每年 5 月和 11 月都将执行这些网络升级。我们特别讨论了对比特币脚本引擎的更改,尽管已进行了其他一些改进,例如 Schnorr 签名。
在比特币的早期,由于一些操作码不安全使用而被禁用。在比特币现金分叉之后的第一年内,比特币-ABC 节点的开发人员解决了这些问题,并重新引入了经过稍微修改的功能的操作码,如下图所示。最重要的是,该升级使在比特币脚本中对结构化数据进行编码和解码成为可能。
图:2018 年 5 月 BCH 启用了新的操作码
此后半年,在 2018 年 11 月的比特币现金网络升级中发布了另一个新的操作码。其中包括该更新 OP_CHECKDATASIG,它使用户可以验证比特币脚本中任何消息的签名。如果我们结合 2018 年推出的脚本更新,这些更新可用于将新颖有用的智能合约功能引入比特币现金。
编写智能合约
相对于原始比特币脚本,比特币现金的新功能为其智能合约增加了很多额外的复杂性。这使得拥有一个通过高级语言、SDK 和工具提供更高级别抽象层的生态系统变得更加重要。
目前正在处理此问题的两个大项目是 Spedn (由笔名 Tendo Pein 创建)和 CashScript (由本文作者 Rosco Kalis 创建,受以太坊的 Solidity 语言的启发)。尽管它们仍在积极开发中,但这些工具使处理比特币现金中的智能合约变得更加容易。下文将使用 CashScript 代码片段来阐述一些功能。
预言机(Oracles)
当过去的比特币脚本更新组合在一起时,它们使您可以通过受信任的预言机将外部数据带入比特币现金的智能合约中。可以将结构化数据编码为字节数组,并由 oracle 提供程序签名。然后,智能合约可以验证签名并解码结构化数据。
可以在下面的 HODLVault 示例合同中查看此示例。该合同强制执行 HODLing,直到达到一定的 BCH / USD 价格为止。所需的 BCH / USD 价格供稿由 oracle 提供程序发布,并由用户传递到合同中。为了增加分散性,可以将智能合约设置为使用多个数据源,而不是信任单个集中式服务。
保证合同(Covenants)
第二个大用例是称为「保证合同」(Covenants)的技术,该技术的名称来自物权法中用来限制对象使用的术语。就比特币现金而言,它限制了智能合约中货币的使用。因此,尽管比特币中的智能合约只能授权一般的货币支出,但比特币现金合约能够对可支出的金额或收款人的身份施加限制。
转让比特币时,发送者必须提供签名以授权交易。为了生成此签名,发送方对交易的哈希表示进行签名。此哈希称为Sighash,而实际的交易数据包含在Sighash 原像中。
通过使用_OP_CHECKSIG_和_OP_CHECKDATASIG_具有相同的签名,我们可以访问 Sighash 数据。数据格式可以在规范中进行检查,并包含在下面的图像中。一个重要字段是 scriptCode,其中包含智能合约本身的字节码。另一个是 hashOutputs 允许用户强制执行交易的输出。
图:比特币现金 Sighash 数据格式
知道保证合同在技术层面上是如何工作的,这很不错,但是 CashScript 已经抽象出了与契约有关的大多数复杂性。使用 CashScript 编写智能合约时,这些字段很容易获得,而无需执行手动验证和解码 Sighash 原图的步骤。
第一个使用保证合同技术的智能合约是 Licho 的 Last Will (最后的遗嘱),这是一个智能合约,可让用户将死者的财产转移到自己的财产上。合同定义了三个不同的功能。第一种允许继承者在 180 天后索取资金。第二个允许所有者的冷密钥(ColdKey)以任何方式花钱。第三个允许所有者的热密钥(Hot Key)通过强制将全部合约余额发送回合约来刷新 180 天的期限。
下面包含 CashScript 版本的 Last Will,但是原始版本是由 Spedn 编写的,可以在此处进行查看。
这是有用的保证合同的简单示例之一,但是保证合同可实现甚至更复杂的功能。在《Last Will》合约签订后,其创建者 Karol Trzeszczkowski 继续创建了 Mecenas,该公司可强制执行 Patreon 等定期付款。
保证合同最初是在题为《 Bitcoin Covenants》的论文中提出的,该论文需要一个新的操作码_OP_CHECKOUTPUTVERIFY_。随后提出了其他建议,例如_OP_CHECKTEMPLATEVERIFY_或_OP_CHECKSIGFROMSTACK_。后者与比特币现金的盟约实施非常相似。可在 Tendo Pein 的文章中学习到保证合同的更多信息。
模拟状态(Simulated state)
查看「最后的遗嘱」合约,当合同到位时更改继承者可能很有价值。由于我们可以通过查看当前合约的字节码来强制发送到当前合约,因此我们可以通过稍微更改此字节码来强制发送到稍微不同的合约。可以创建了一个函数,该函数将整个合同的余额发送到具有完全相同的字节码但具有不同的继承者的合约。
我们只能使用已知大小(例如 20 字节)的构造函数参数来执行此操作。构造函数参数始终是合同字节码的第一个数据,这就是我们能够轻松地用新数据替换旧数据的方式。该 inheritor 是第一个构造函数的参数,它的大小为 20 个字节,因此我们能够应用该技术,如可以看到下面。
通过使用该技术,可以在保留合约相同规则的同时更改合约中的某些变量。我们将其称为「模拟状态」,因为它提供了合约状态的某些好处,并且不存在像以太坊那样有状态(Stateful)的系统的可拓展性问题。由于必须在某处进行权衡,因此此方法还有其他缺点。
主要问题是我们实际上并未更改原始合同中的任何变量,因为由于比特币现金的无状态性,这是不可能的。而是创建一个新合同(具有新地址),并将全部余额转移到该新合约中。由于新地址,这会导致 UX 问题,但是可以通过在这些智能合约上具有良好的应用程序层抽象来缓解这些问题。
在字节码内部替换这些变量可能会感到很麻烦,尤其是在尝试替换字节码内部更深的变量时。应该以高级语言抽象该功能,以便通过提供新参数自动生成新的字节码。这种抽象可能看起来像这样:
许多抽象性是以更大的合约为代价的,从而导致更高的费用。 但比特币现金的交易费用通常很低,因此可谓集二者之大成。但是比特币现金具有与比特币相同的大小限制,因此这些抽象确实使保持在限制内变得更加困难。这导致许多开发人员不得不手动优化已编译的字节码。
结论
每种加密货币都在其智能合约系统中进行权衡。以太坊是功能最广泛的最常用的智能合约平台。比特币通过其无状态脚本系统提供了更基本的智能合约版本,此无状态系统验证效率更高,但功能较少。比特币现金与比特币具有相同的基础,但是增加了新功能,试图在有效验证和有用的智能合约之间折衷。最后,所有人都朝着相似的目标迈进。
展望未来
本文写于 2019 年第四季度,反映了平台的当前状态。加密货币是一个快节奏的领域,因此涉及这些平台的人们始终在努力进行改进,这可能会改变生态系统的前景。
以太坊正在开发主要的以太坊 2.0 版本,其第 0 阶段计划于 2020 年第一季度上线。以太坊 2.0 旨在通过转移到权益证明,实施分片和其他改进来解决以太坊 1.x 的性能问题。ETH2.0 的完整路线图尚未确定,可能要花费数年时间才能推出。但是,如果此重大更新能够实现其目标,则可以为以太坊提供强有力的支持。
比特币中的智能合约研究致力于进一步提高智能合约的效率和隐私性,这包括 Taproot 和无脚本脚本之类的解决方案。而比特币现金则继续致力于启用其他智能合约功能,并致力于使这些更改更易于访问。
比特币行情交流群,区块链微信交流群:CABT888