Roteador de Fluxo
Motor central · opera os quatro momentos
Não é uma etapa do ciclo: é o contrato que opera todas. Converte FGO86 em MGO86, emite o GO86 a partir do MGO86, autoriza o resgate em barra e valida a transferência entre carteiras.
O que é
Contrato de orquestração. Não é token: mantém o estado contábil de cada posição e é a única entidade autorizada a emitir os três ativos. A regra é estrutural, não operacional: GO86 nasce apenas de MGO86, e nenhuma das quatro operações pode ser executada fora dele.
Objetivo
Garantir que captação, conversão, liquidez e resgate ocorram em etapas separadas e auditáveis, com registro no Cofre-Limbo, sem queima e sem rota de retorno.
Como é feito
fund()executa somente após o vencimento: consome o FGO86, deposita no Cofre-Limbo e emite MGO86.settle()consome o MGO86, deposita no Cofre-Limbo e cria o GO86 na mesma transação.redeemBar()confere o lote mínimo de 12.500 unidades e libera a barra física, depositando o GO86 no Cofre-Limbo.validateTransfer()confere o lote mínimo de 1.000 unidades antes de qualquer transferência entre carteiras. Sem essa checagem, o GO86 não se move.- Não existe função que converta FGO86 em GO86.
- Cada endereço mantém uma
Positioncom valor comprado, convertido e liquidado. - Não existe
unwind()nemrefund(). Apóssettle(), o estado é final.
Especificação
- Tipo
- Contrato roteador, não token
- Acesso
- AccessControl por papel
- Proteção
- ReentrancyGuard e verificação de estado
- Preço
- Oráculo de referência do ouro
- Direção
- Unidirecional
- Governança
- Multi-sig após o deploy
Funções do contrato
fund(uint256 fgAmount)
Investidor
Etapa 1 para 2: consome o FGO86, deposita no Cofre-Limbo, apura a quantidade e emite MGO86.
settle(uint256 grams)
Investidor
Etapa 2 para 3: consome o MGO86, deposita no Cofre-Limbo e cria o GO86. Única função que cria GO86.
redeemBar(uint256 grams, bytes32 barId)
Investidor (lote de 12.500)
Terceiro momento: confere o lote mínimo, registra a barra física e deposita o GO86 no Cofre-Limbo.
validateTransfer(address from, address to, uint256 amount)
GO86
Quarto momento: confere lote mínimo de 1.000 unidades e libera a transferência entre carteiras. Não passa pelo Cofre-Limbo.
quote(uint256 fgAmount, uint8 termMonths) view
Público
Simula a quantidade de MGO86 gerada, considerando preço, prazo e proporção vigentes.
setRatio(uint256 bps)
ADMIN com timelock
Ajusta a proporção entre valor e quantidade, com timelock e evento público.
setOracle(address)
ADMIN
Define o oráculo de preço de referência do ouro.
setLimbo(address)
ADMIN
Propaga o endereço do Cofre-Limbo para os três tokens.
positionOf(address) view
Público
Retorna a Position completa do endereço.
Regras
- GO86 é emitido apenas a partir de MGO86.
- Nenhuma função converte FGO86 em GO86.
- A conversão fica bloqueada até a data de vencimento do contrato.
- Resgate em barra e transferência entre carteiras passam pela checagem do motor.
- Cada etapa encerrada deposita o token no Cofre-Limbo. A venda entre carteiras não deposita.
- O estado é atualizado antes de qualquer transferência externa.
Correlação com os demais contratos
Consome o FGO86 após o vencimento, converte em MGO86 e deposita o FGO86 no Cofre-Limbo.
Emite e processa. O MGO86 só existe dentro do motor e é a matéria-prima do GO86.
Detém o MINTER_ROLE, cria o ativo final em settle() e valida a saída em redeemBar() e validateTransfer().
Executa cada depósito no limbo: FGO86 na conversão, MGO86 na emissão e GO86 no resgate.