Adicione um novo campo minStartTime
à assinatura da transação que replica o comportamento de um nonce
. Quando esse valor é definido, ele cria um atraso de tempo para a transação na qual o produtor de blocos não pode incluir a transação.
minStartTime
é a uint256
Timestamp de época em que a transação se tornará válida
Layout de assinatura:
(nonce, minStartTime, gasPrice, gasLimit, to, value, data)
Exemplo de lógica para exclusão de transações:
if(msg.minStartTime < block.timestamp)
Um bloco observado que inclui um msg.minStartTime
menor que block.timestamp
do bloco em que a transação é incluída deve ser rejeitada pela implementação de nós.
Com base em algum feedback inicial, estou modificando esta proposta com regras para a inclusão de Mempool.
Vamos considerar a minStartTime
de 0 para ser um caso especial que implica que o signatário da transação não deseja definir um futuro minStartTime
e pode ser incluído em um bloco imediatamente.
Usando regras de inclusão padrão para mempool, transações que têm um nonce
Abaixo que o Nonce atual da conta será retirado do Mempool. Ou seja, o usuário pode enviar várias transações com a primeira transação incluída invalidando as outras transações no Mempool.
A inclusão de mempool deve ser restrita a uma única transação com um msg.minStartTime > 0
. Isso evitará ter várias transações em Mempool ao mesmo tempo. Se duas transações chegarem com msg.minStartTime > 0
o nó deve selecionar a transação com o menor msg.minStartTime
.
O uso de heurísticas no Mempool será fundamental para impedir a transação com msg.minStartTime > 0
onde o msg.minStartTime
está definido arbitrariamente alto ex: 10 anos. Cada transação deve ser restrita a block.timestamp + 1 days
.
4 curtidas
Eu só quero amenizar os medos de alguém de que isso possa ser feito na camada de contrato, não pode. Uma transação executável como uma metatransação com um minStartTime
ainda seria executável antes minStartTime
e apenas resultaria em uma execução de transação com falha quando encontrou a condição de reverter para minStartTime
.
Essa melhoria da experiência do usuário exigiria uma alteração de protocolo no esquema de assinatura.
Definitivamente, faz sentido, e estamos pensando em adicionar um recurso como esse a Skale.
É muito mais limpo para o usuário, porque o usuário tem garantia de que, se uma transação não for executada dentro de um período fixo de tempo, nunca será executado
Isso soa como o oposto do que está sendo proposto aqui. Esta proposta está sugerindo que uma transação deve ser incluída depois timestamp
não que deve ser incluído antes timestamp
.
3 curtidas
GM @joseph,
Eu tenho pensado no caso de uso para execução de transações com restrição de tempo e identifiquei alguns desafios em potencial com a funcionalidade descrita:
Problemas:
- Estimativa de gás: A previsão do gás para futuros blocos é inerentemente incerta. Uma transação destinada à execução dentro de um prazo específico (por exemplo, dentro de 24 horas de acordo com sua declaração) pode nunca ser processado devido a restrições de gás e pode exigir uma taxa de gás significativamente mais alta do que o previsto. Isso também assume a viabilidade de uma “saída gratuita de mempool”, que atualmente não é possível.
-
Condições de substituição da transação: A introdução de uma condição de tempo complica as regras para a substituição da transação (nonce). Os novos critérios seriam: se “GasPrice + Taxa de prioridade> = (Taxa anterior de GasPrice + Prioridade) * 1.1” e se “novo horário
- Seleção de transações por nós: Os nós priorizam as transações pendentes com base em nonce. Dado que várias transações válidas com o mesmo nonce não podem coexistir, a arquitetura atual não permite nenhum outro critério de seleção além do GasPrice.
No entanto, acredito que existem soluções existentes que podem alcançar o comportamento desejado:
Soluções:
- Serviços fora da cadeia: Use um serviço fora da cadeia para enviar a transação com a quantidade apropriada de gás no tempo de execução desejado. Vários desses serviços estão disponíveis.
- Ganhar um hackathon budling um Seguro + osnap de uma Para isso: configure seu seguro com o recurso OSNAP para a transação em questão.
Espero que esse feedback ajude a refinar sua proposta. Estou ansioso para contribuir com mais informações, se necessário.
Além disso, @kladkogex, acho sua abordagem intrigante. A idéia de estabelecer um alto limite de gás para garantir a execução da transação ou limitar o gás e o tempo é inovador. No entanto, apresenta possíveis desafios, especialmente quando se considera o gerenciamento de Nonce e a substituição de transações. Eu estaria interessado em me aprofundar neste tópico em uma discussão separada.
4 curtidas
Geralmente a favor da direção desta proposta.
Uma proposta um tanto relevante: EIP-5081: TrainSaction expirável
Adicionaria o Gashawk como uma solução potencial aqui também (CEO da isenção de responsabilidade)
Construímos algoritmos que nos permitem prever e executar a menor taxa básica em qualquer intervalo de tempo, que salve usuários e instituições nos custos de taxas/TX. Também impedimos que falhassem e prendos TXs e permitimos que um usuário ou instituição defina sua sensibilidade ao tempo.
Ficaria feliz em conversar mais sobre este tópico!
3 curtidas
Já não é possível na camada de contrato usando a abstração da conta (ERC-4337)? A função de validação (validateUseROP) pode retornar:
O Validuntil é um valor de timestamp de 6 bytes, ou zero para “infinito”. O usuário é válido apenas até esse momento.
O ValidAfter é um registro de data e hora de 6 bytes. O usuário é válido somente após esse período.
A ideia de adicionar um minStartTime
O campo faz sentido para os casos em que você deseja um atraso interno sem ferramentas de agendamento extras. Usando 0
Como o padrão de “execução imediata” parece uma maneira limpa de lidar com compatibilidade com versões anteriores.
Restringindo o mempool a apenas um minStartTime > 0
A transação parece ser uma maneira razoável de evitar conflitos, e o limite de 1 dia é uma boa salvaguarda contra valores extremos. Para um contexto mais amplo, esse tipo de consideração de design é semelhante à forma como os padrões de UX são abordados em outros domínios (por exemplo, práticas de design de UI/UX), onde padrões e limites claros ajudam a evitar confusão ou uso indevido.
Fontesethresear