On-chain desde 2022
Soy Alberto Bas, ingeniero de software.
Diseño y desarrollo productos Web3 de extremo a extremo. Desde contratos inteligentes a aplicaciones full-stack, modelos de aprendizaje automático, circuitos de conocimiento cero...
Desarrollo de contratos inteligentes
Automatice y asegure transacciones con contratos inteligentes, ejecute acuerdos de manera transparente y eficiente sin necesidad de intermediarios.
- Lenguajes: Solidity y Vyper.
- Entornos de trabajo: Hardhat, Foundry y Brownie
contract BottlingCompany is Initializable, BottlingPlantUpgradeable { /** * @dev Initialize function. * @param dependentToken The dependent token address. * @param industrialUnitToken The industrial unit token address. * @param escrow_ The industrial units escrow address. */ function initialize( address dependentToken, address industrialUnitToken, address escrow_) external initializer { __BottlingPlantUpgradeable_init('Bottling Company', dependentToken, industrialUnitToken, escrow_); } /// @dev See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps uint256[50] private __gap;}Desarrollo de subgrafos
Libere el potencial de las aplicaciones descentralizadas con soluciones de subgrafos para recopilar y agregar datos de manera eficiente.
- Lenguajes: GraphQL, AssemblyScript y TypeScript.
- Librerías: TheGraph.
type Account @entity(immutable: false) { id: Bytes! asCertificateContract: CertificateContract asEscrowContract: EscrowContract asMemberContract: MemberContract asTokenContract: TokenContract escrowBalance: Balance events: [IEvent!] @derivedFrom(field: "emitter") ownerOfMember: [MemberContract!] @derivedFrom(field: "owner") ownerOfCertificateContract: [CertificateContract!]! @derivedFrom(field: "owner") ownerOfEscrowContract: [EscrowContract!]! @derivedFrom(field: "owner") ownerOfTokenContract: [TokenContract!]! @derivedFrom(field: "owner") ownershipTransferred: [OwnershipTransferred!] @derivedFrom(field: "owner") tokenBalances: [Balance!] @derivedFrom(field: "tokenAccount") tokenOperatorOwner: [TokenOperator!] @derivedFrom(field: "owner") tokenOperatorOperator: [TokenOperator!] @derivedFrom(field: "operator") tokenTransferFromEvent: [TokenTransfer!] @derivedFrom(field: "from") tokenTransferToEvent: [TokenTransfer!] @derivedFrom(field: "to") tokenTransferOperatorEvent: [TokenTransfer!] @derivedFrom(field: "operator")}Implementación de conocimiento cero
Proteja datos y transacciones con tecnologías de conocimiento cero de vanguardia que brindan garantías criptográficas sin comprometer la funcionalidad.
- Lenguajes: Circom.
- Librerías: Circom y Snark.js.
template ConnectFour() { // private input signal representing the board signal input board[6][7]; // winner of the game, either 1 or 2. signal input winner; // array of arrays with the indexes of the four consecutive counters signal input coordinates[4][2]; // intermediate signal for the number of winners signal numWinners; // intermediate signal for the winner after checking the board signal checkedWinner; // intermediate signal for the indexes of the four consecutive counters after // checking the board signal checkedWinningCoordinates[4][2]; // ...} component main = ConnectFour();Desarrollo de front end
Cautive a una audiencia con interfaces de usuario que garantizan una experiencia intuitiva e inmersiva para los usuarios, impulsando el compromiso y la satisfacción.
- Lenguajes: TypeScript.
- Entornos de trabajo: Next.js y Vite.
export function useAI(): { isSlow: boolean setIsSlow: Dispatch<SetStateAction<boolean>>} { const { status, turn, board, numCounters, mode } = useAppSelector(connectFourSelector) const dispatch = useAppDispatch() const timerId = useRef<null | NodeJS.Timeout>(null) // eslint-disable-line -- allow undef const [isSlow, setIsSlow] = useState<boolean>(true) useEffect(() => { const predict = async (): Promise<void> => { // ... } if (((mode === 'userVsAI' && turn === '2') || (mode === 'aIVsUser' && turn === '1')) && status !== 'gameOver') { timerId.current = setTimeout( () => { predict() // eslint-disable-line -- allow floating promise }, isSlow ? 1000 : 0, ) } return () => { if (timerId.current !== null) { clearTimeout(timerId.current) } } }, [mode, status, board, turn, dispatch, isSlow, numCounters]) return { isSlow, setIsSlow }}Desarrollo de back end
Impulse una plataforma con una infraestructura back-end robusta y escalable que garantice un funcionamiento y confiabilidad impecables.
- Lenguajes: TypeScript y Python.
- Entornos de trabajo: Express.js y Flask.
const logger: IWinstonLogger = new WinstonLogger(); const deleteByIdPath = join(deletePath, ':identifier');const getByIdPath = join(getPath, ':identifier'); const routesData: RouteData[] = [ // Valid requests method: createMethod, path: createPath, handler: createLoanController , method: deleteByIdentifierMethod, path: deleteByIdPath, handler: deleteLoanByIdentifierController , method: getAllMethod, path: getAllPath, handler: getAllLoansController , method: getByIdentifierMethod, path: getByIdPath, handler: getLoanByIdController , method: updateMethod, path: updatePath, handler: updateLoanController , // Invalid methods { method: 'all', path: createPath, handler: handleInvalidMethodController, isSync: true }, { method: 'all', path: deleteByIdPath, handler: handleInvalidMethodController, isSync: true }, { method: 'all', path: getAllPath, handler: handleInvalidMethodController, isSync: true }, { method: 'all', path: getByIdPath, handler: handleInvalidMethodController, isSync: true }, { method: 'all', path: updatePath, handler: handleInvalidMethodController, isSync: true }, // Unrecognized URLs { method: 'all', path: '*', handler: handleNotFoundController, isSync: true }]; async function main(): Promise<void> { new ExpressApi(logger, routesData).start(LoansConfigV1.PORT ?? '3003');} main().catch((error) => { logger.error(error); process.exit(0);});Modelado de aprendizaje automático
Aproveche el poder de la IA para obtener conocimientos e impulsar la innovación con modelos adaptados a necesidades específicas, optimizando procesos comerciales.
- Lenguajes: Python.
- Librerías: PyTorch y Keras.
class ConnectFourNet(Module): def __init__(self, out_features: int): super(ConnectFourNet, self).__init__() self.policy = nn.Sequential( # (N, Cin, Hin, Win) -> (N, Cout, Hout, Wout) nn.Conv2d(2, 16, 3, 1, 1), nn.ReLU(), # (N, Cin, Hin, Win) -> (N, Cout, Hout, Wout) nn.Conv2d(16, 16, 3, 1, 1), nn.ReLU(), # (N, Cin, Hin, Win) -> (N, Hout) nn.Flatten(), # (N, Win) -> (N, Hout) nn.Linear(672, 128), nn.ReLU(), # (N, Win) -> (N, Hout) nn.Linear(128, out_features) ) # ... def forward(self, x: torch.Tensor, model: Literal['policy', 'target']): if model == 'policy': return self.policy(x) elif model == 'target': return self.target(x)Tareas de ciencia de datos
Extraiga información útil de datos con soluciones avanzadas de ciencia de datos para tomar decisiones informadas y generar crecimiento.
- Lenguajes: Python.
- Librerías: Pandas, Numpy, SciPy, Matplotlib, Seaborn...
def plot_bivariate(X, id_vars, value_vars, font_scale, col_wrap, height, aspect, function, labels_thresh=None, rotation=None): sns.set(font_scale=font_scale, style='darkgrid') plot_data = pd.melt(X, id_vars=id_vars, value_vars=value_vars, var_name="predictor", value_name="predictor_value") fgmap = sns.FacetGrid(plot_data, col="predictor", col_wrap=col_wrap, height=height, aspect=aspect, sharex=False, sharey=True).map(function, "predictor_value", id_vars) if rotation is not None: if labels_thresh is None: [plt.setp(ax.get_xticklabels(), rotation=rotation) for ax in fgmap.axes.flat] else: [plt.setp(ax.get_xticklabels(), rotation=rotation) for ax in fgmap.axes.flat if len(ax.get_xticklabels()) > labels_thresh]Proyectos

zk Connect Four
zk Connect Four es una aplicación descentralizada de conocimiento cero que le permite jugar al juego de Conecta Cuatro contra una política de juego entrenada por un agente DQN, o contra otro usuario.

Bank Microservices
Bank Microservices es mi propuesta de una aplicación, con arquitectura basada en microservicios y utilizando el stack MERN.

Olive Oil Trust
Olive Oil Trust es un sistema de trazabilidad para el aceite de oliva implementado en Ethereum que adapta el flujo de trabajo de la cadena de valor larga del aceite de oliva a la cadena de bloques mediante el uso de contratos inteligentes.

albertobas.com
Esta es mi página web personal, donde publico artículos y proyectos.
Blog
zk-SNARK
Cómo desarrollar una DApp de conocimiento cero
Esta entrada ofrece una introducción a cómo desarrollar una aplicación capaz de generar y validar...
Aprendizaje por refuerzo
Formación de un agente DQN en el juego de Conecta Cuatro
Ejercicio para obtener una estrategia, plan o política de acción (policy) que sea capaz de...
Microservicios
Propuesta de una aplicación bancaria con arquitectura basada en microservicios
Aplicación bancaria de arquitectura basada en microservicios que incluye aplicaciones de back end, front end,...
Trazabilidad
Presentando Olive Oil Trust: front end
Aplicación de Next.js que da soporte a los miembros y clientes de Olive Oil Trust,...
Trazabilidad
Presentando Olive Oil Trust: subgrafo
Subgrafo para consultar datos de Olive Oil Trust de una manera eficiente usando TheGraph.
Trazabilidad
Presentando Olive Oil Trust: contratos inteligentes
Los contratos inteligentes de Olive Oil Trust se implementan con el objeto de adoptar un...
Trazabilidad
Presentando Olive Oil Trust
Introducción a una serie de artículos acerca de Olive Oil Trust
DeFi
Cómo crear una aplicación de analítcas de DEXs
Introducción a la obtención y representación de datos de DEXs utilizando TheGraph y React.js
Clasificación
Clasificación de noticias de 20Newsgroup
Clasificación de texto en el conjunto de datos 20Newsgroup