Как гарантировать, что вводом смарт-контракта не манипулируют?
Допустим, мой DApp получил следующий (умный) контракт:
module.exports = {
winner: async function(value) {
if (value===10) {
}
}
}
Теперь пользователь Dapp может сделать что-то, что вызывает контракт с некоторыми value
который может быть 10
или нет. Dapp определяет, если value
равняется 10
или нет. Все идет нормально.
Но теперь кажется, что любой с действительным секретом (и некоторым XAS, отправленным в боковую цепочку Dapps) может ссылаться на контракт с простым PUT
запросить api/<dappId>//transactions/unsigned
с value
установить все, что они хотят.
Как обеспечить, чтобы значение value
устанавливается Dapp и не может манипулировать?
1 ответ
Насколько я понимаю, Asch DApps запускаются на экспресс-сервере с включенным промежуточным программным обеспечением 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