Operación de grupo de pedidos de solidez Web3

El artículo anterior se estableció por algunas razones para ingresar sus necesidades visibles. Los amigos que lo necesiten pueden enviarme un mensaje privado.
inserte la descripción de la imagen aquí
Del programa que escribimos antes, el intercambio no es más que una custodia de tokens, pero será más profesional. En
este artículo , sigamos analizando una de las funciones de intercambio denominada piscina

Por ejemplo, intercambiamos 100grToken por 1ETH
bajo la premisa de que nuestros tokens ya pueden ser valorados.Por
ejemplo, si desea utilizar RMB contra el dólar estadounidense, se debe estipular el tipo de cambio entre ellos,
pero nuestro lugar en sí es un entorno de simulación. ,
y no es razonable operar directamente.
Así que aquí desarrollamos directamente una función de piscina o ordenamos piscina

Podemos crear pedidos por nosotros mismos. Por ejemplo, Xiao Ming publicó una lista de ustedes que están dispuestos a intercambiar 100grToken por 1 ETH. Nuestros
pedidos pendientes estarán en nuestra piscina. Si alguien cree que es apropiado hacer clic en esta confirmación, el fondo operará y lo vinculará a él y a la persona que emitió el pedido. Los datos correspondientes se deducen para completar el pedido
, pero puede ser liberado por XX, pero debido al cambio de tipo de cambio, el anterior no es adecuado y puede ser cancelado.

Aquí necesitamos crear tres funciones
makeOrder para crear un pedido
cancelOrder para cancelar un pedido
fillorder para completar un pedido

Todavía es un proceso estándar para iniciar nuestro entorno ganache.
inserte la descripción de la imagen aquí
Entonces todavía tenemos un problema aquí. No podemos encontrar bien la cantidad de tokens del usuario.
Entonces necesitamos agregar una función balanceof en Exchange.sol. Especificamos para consulta la dirección correspondiente del usuario correspondiente bajo los tokens Valor
Devuelve un valor de tipo digital uint256
y luego establece el alcance de la función pública para que sea una configuración de vista pública Simplemente lee la información en nuestra cadena de bloques
inserte la descripción de la imagen aquí
y cualquiera de nuestros pedidos debe contener el siguiente información
id Esta es la estructura de datos más básica Las cosas deben tener una id para marcar y eliminar la orden.
El usuario que creó la orden también debe juzgar la autoridad cuando se muestra en la interfaz. Si el usuario actual puede eliminar y administrar la orden,
entonces qué token se usa para intercambiar otro token
por orden de almacenamiento de tiempo creada por

Estos miembros deben ser necesarios.
Tenemos que resolver el pensamiento positivo. No tenemos servidor ni base de datos, por lo que su vida está en la estructura de datos de la cadena, que es el almacenamiento de datos. Luego declaramos tal estructura de orden en el Exchange
. .sol contrato.

 //订单结构体
 struct _Order{
    
    
     uint256 id;
     address user;
     
     address tokenGet;
     uint256 amountGet;

     address tokenGive;
     uint256 amountGive;

     uint256 timestamp;
 }

Aquí nuestra estructura de datos corresponde a los dos tipos anteriores de cantidad de tokens e identificación de dirección, dirección de usuario y tiempo, pero
inserte la descripción de la imagen aquí
este formulario obviamente solo nos permite crear un pedido.
Si queremos crear más de uno, este método debe incrementarse.

La forma más sencilla es, naturalmente, utilizar una matriz de tipo _Order

_Order[] orderlist;

Pero por la conveniencia de consultar por id aquí, elijo directamente

mapping(uint256=> _Order) public orders;

Defina una propiedad de objeto de mapeo y la clave es un tipo de número uint256 correspondiente a la identificación del pedido y el valor es un objeto _Order.
inserte la descripción de la imagen aquí
Los amigos que han estudiado js deben entender la diferencia entre los dos antes.
La matriz es así

[1,2,3]

Y la forma de objeto que estamos usando ahora es así

{
    
    
    0: 1,
    1: 2,
    2: 3
}

Pero no es más que la clave de nuestro objeto, usamos el id de la orden,
lo podemos encontrar en forma de objeto [order id]

Luego creamos un

uint256 public orderCount;

El tipo de número es simplemente para registrar la cantidad del pedido
inserte la descripción de la imagen aquí
, y luego podemos escribir
makeOrder a continuación para crear un pedido.
Pero después del contenido de los intercambios anteriores, creo que todos han desarrollado un buen hábito de registrar eventos
, por lo que también necesita crear un pedido aquí Para grabar
definimos un evento

event Order(uint256 id,address user,address tokenGet,uint256 amountGet,address tokenGive,uint256 amountGive,uint256 timestamp);

inserte la descripción de la imagen aquí
Luego escribimos la función hacerPedido

function makeOrder(address _tokenGet,uint256 _amountGet,address _tokenGive,uint256 _amountGive) public {
    
    
    orderCount = orderCount.add(1);
    orders[orderCount] = _Order(orderCount,msg.sender,_tokenGet,_amountGet,_tokenGive,_amountGive,block.timestamp);
    emit Order(orderCount,msg.sender,_tokenGet,_amountGet,_tokenGive,_amountGive,block.timestamp);
}

Luego, nuestro parámetro acepta la dirección y la cantidad de los dos tokens, y luego obtenemos orderCount y le agregamos 1. Por ejemplo, la primera vez que entramos, es 0, le agregamos 1, para que sea 1 , y luego copiamos el ID de pedido actual, que es orderCount second
.El orderCount de la segunda entrada es 1, más uno, se convierte en 2,
y luego nuestros usuarios aún usan msg
.

Después de agregar los datos, llame al Pedido que acabamos de escribir para registrar la información del pedido.
Bueno, no tenemos las condiciones para la prueba. Para asegurarnos de que nuestro código esté bien, lo ejecutamos en la terminal.

truffle compile

inserte la descripción de la imagen aquí
Ok, no hay problemas de sintaxis en cuanto a las pruebas, etc. He hecho todas las operaciones de pedido, estamos haciendo algunas más.

Supongo que te gusta

Origin blog.csdn.net/weixin_45966674/article/details/132316003
Recomendado
Clasificación