Pages:
Author

Topic: Синхронизация в solidity? - page 2. (Read 1097 times)

newbie
Activity: 21
Merit: 0
October 30, 2017, 12:03:47 PM
#4
Кстати, если ты уверен, что такая ситуация возможна, то можно попробовать перестраховаться с помощью require, типо:
address addr = msg.sender;
require(addr == msg.sender);
А затем уже делать какие-то действия. В случае выполнения условия, последующий код не выполнится. Но вообще, по идее, вызовы функций двумя разными адресами - две разные транзакции.
newbie
Activity: 21
Merit: 0
October 30, 2017, 06:50:30 AM
#3
Да, как было отмечено, лучше отказаться от использования function(). Вопрос интересный, но есть большие подозрения, что это так не работает) Всегда можно протестировать.
newbie
Activity: 25
Merit: 0
October 30, 2017, 06:06:02 AM
#2
Разве может за такое малое время прийти новый платеж? Возможно, в таком случае, стоит отказаться от function() в пользу обычной функции?
sr. member
Activity: 613
Merit: 256
October 24, 2017, 02:42:59 PM
#1
Code:
pragma solidity ^0.4.0;

contract Doubler {

address public owner;

address public lastGamer;

uint public constant GAME_PRICE = 10 * 10 **15;

uint public constant DOUBLE_AMOUNT = GAME_PRICE * 2;


function Doubler() payablee public {

owner = msg.sender;
}

function () payablee public {
lastGamer = msg.sender;//LINE1
require(msg.value >= GAME_PRICE);//LINE2
lastGamer.send(DOUBLE_AMOUNT);//LINE3
}
}

Дедал примитивный даблер и обнаружил возможную проблему:
Предположим приходит платеж на контракт и контракт сохраняет адрес отправителя в переменную(//LINE1) и выполняет проверку(//LINE2), а в это время приходит другой платеж и что тогда? адрес предыдущего отправителя будет перезаписан(//LINE1) и после этого дважды выплату получит второй отправитель(//LINE3)

Конечно строки //LINE1 и //LINE2 надо поменять местами, но это не даст 100% гарантии защиты целостности данных.

Неужели разработчики solidity ничего не предусмотрели для предотвращения подобных случаев?
Pages:
Jump to: