128

请问智能合约为什么要写业务逻辑?

konakona · 于 发布 · 最后由 ajian1984回复 · 455 次阅读

我是一个初学者。学习了几天ETH Truffle。

官方DEMO:https://solidity-cn.readthedocs.io/zh/develop/solidity-by-example.html
里面的投票DEMO和盲拍DEMO,都将业务逻辑写在了里面。

我就产生了一个疑问,为何要将业务逻辑写在里面呢?(业务逻辑不包含:msg.sender是否有足够的钱、发送者是否有足够的钱、发送者是否是接收者等这些基础判定)

为什么不能是简单的接受、发送、判定呢?

为了实现一套DApp,中间件或者说后端是少不了的,由PHP、JAVA、GO、Nodejs实现。那为什么业务逻辑不放在这些后端程序里判断呢?这个疑惑主要来源于当我看到官方投票DEMO代码里,将投票人(多)的枚举、记录、计算、判断都放在了代码里,最终计算出谁获得的投票最多然后返回。同样的,在盲拍里也有这个疑惑。

是为了模拟真实吗?

是因为合约内容(即合约代码)可以被看见吗?

我隐约有个想法,是为了解决不同的中间件(或者说后端)在开发时缺少对关键交易的统一性吗?


合同地址(一串字符串)一旦被获悉,可以被任何人模拟请求。然后直接绕过你的中间件逻辑,直达合同交易请求。所以合同本身必须有逻辑。

(这个社区太冷了, 我只能自问自答了)

  • 128
    ajian1984

    是的,pang 友,这论坛实在太冷了。。

    我觉得这问题其实并不简单啊。其实分很多层面来说。

    比如:1. demo 的合约里要放逻辑也不并不是暗示这是最好的架构,只是示范而已。
    2. 合约要有逻辑我感觉不仅有你说的那一层,就是不放在合约里面也会被绕过,即部署后端会是无用功(其实用户不会有这个意识,但懂工程的人确实会这么绕过)(而且,把逻辑放在合约里有另一个问题,就是别人会抄),还有另一个角度,就是区块链本身是造就计算过程本身的可信性,为了造就这种可信性,只能让这段代码在全球各个计算机上都跑一遍。把逻辑放进合约并不是为了效率,而是为了计算过程的可信性,没有这一点,用不用区块链都没啥区别了。