如何保证智能合约的输入不被篡改?

How To guarantee that the input of the smart contract is not manipulated?

假设我的 DApp 获得了以下(智能)合约:

module.exports = {
  winner: async function(value) {

    if (value===10) {

        } 
  } 
}

现在 Dapp 用户可以做一些事情来调用一些 value 的合约,可以是 10 也可以不是。 Dapp 确定 value 是否等于 10。到目前为止一切顺利。

但现在看来,任何拥有有效秘密(以及一些 XAS 发送到 Dapps 的侧链)的人都可以通过 valueapi/<dappId>//transactions/unsigned 发出简单的 PUT 请求来调用合约] 设置为他们想要的任何值。

如何保证value的值是Dapp设置的,不可篡改?

据我所知,Asch DApps 运行 在 express 服务器上启用了 cors 中间件,这意味着任何人都可以发出请求(GET、POST、PUT 等)来自任何地方。

因此可以使用如下所示的脚本轻松调用您的合约:

const axios = require('axios');
var fee = '10000000'
var data = {
        secret: "<your secret>",
    fee: fee,
         type: 1001, //the number for contractfile.function
         args: 1000 // a very high score
         }
axios.put('http://<domain>:4096/api/dapps/<dappid>/transactions/unsigned',data)
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  })
  .then(function () {
    // always executed
  });

由于上述原因,无法保证输入未被操纵(从 DApp 外部发送)。另见:https://github.com/AschPlatform/asch/issues/228