![](/img/bg-single.png)
Miten tunnistaa BlackList DeFi token?
![](https://lotusmarket.io/storage/files/how-to-identify-blacklist-defi-token/cover.png)
Jatkamme artikkelisarjaa, joka on omistettu petollisten skeemojen kuvaamiseen älykkäissä sopimuksissa. Tänään analysoimme älykkäitä sopimuksia, joissa on Musta Nimekemerkintä (Black List) -toimintoja.
Älykkäiden sopimusten Musta Nimeke -toimintojen vaarat:
Älykkäät sopimukset, jotka sisältävät Mustan Nimekemerkinnän toimintoja, kantavat mukanaan tiettyjä riskejä ja ongelmia sekä projektin että sen käyttäjien kannalta. Tässä joitakin Mustaan Nimekkeeseen liittyviä vaaroja:
- Keskitetty hallinta: Mustan Nimekemerkinnän toiminnot tarjoavat usein keskitetyn hallinnan sopimuksen omistajalle tai ylläpitäjille.
- Mustan Nimekkeen väärinkäyttö epäreiluihin käytäntöihin: Väärinkäyttäjät (mukaan lukien sopimuksen omistaja) voivat käyttää mustaa nimekettä kohdistaakseen tiettyjä osoitteita. Tämä voi sisältää tilien jäädyttämisen tai toimintojen rajoittamisen ilman pätevää syytä.
- Läpinäkymättömyys: Mustan Nimekemerkinnän toimintojen olemassaolo, erityisesti jos niitä ei ole dokumentoitu, voi johtaa läpinäkymättömyyteen. Käyttäjät eivät välttämättä ole tietoisia nimekemerkinnän kriteereistä tai menettelyistä.
- Turvariskit: Jos Mustaa Nimekettä ei toteuteta turvallisesti, on riski haavoittuvuuksille, jotka voisivat mahdollistaa luvattomien osapuolten manipuloida nimekettä, mikä voisi johtaa varojen luvattomaan jäädyttämiseen tai siirtoon.
- Käyttäjien luottamuksen heikkeneminen: Mustan Nimekemerkinnän toiminnot voivat heikentää käyttäjien luottamusta, koska heidän varansa voivat joutua nimekkeen kohteeksi ilman selkeitä sääntöjä.
- Tokenien takavarikointi: Hyökkääjät voivat käyttää Mustaa Nimeketta takavarikoimaan tokenit tai varat tietyiltä osoitteilta ilman asianmukaista perustetta. Tämä voi johtaa merkittäviin taloudellisiin tappioihin.
Kuinka voit itsenäisesti tunnistaa tällaiset uhat älykkäissä sopimuksissa?
Validoidessasi älykästä sopimusta voit ottaa tiettyjä askelia havaitaksesi, liittyykö siihen uhka Mustan Nimekkeen toiminnoista:
- Ennen kuin aloitat työskentelyn älykkään sopimuksen kanssa, lue ja tutki huolellisesti sen koodi, mukaan lukien kaikki mustaan nimekkeeseen liittyvät toiminnot. Etsi toimintoja, jotka liittyvät mustaan nimekkeeseen, jäädyttämiseen tai tilien toiminnallisuuden rajoittamiseen. Tarkista toiminnot, jotka mahdollistavat osoitteiden lisäämisen tai poistamisen mustalta nimekkeeltä.
- Analysoi, kuka omistaa tai hallinnoi sopimusta. Arvioi omistajan tai ylläpitäjien hallinnan astetta ja niihin liittyviä oikeuksia.
- Tarkastele sopimuksen dokumentaatiota ymmärtääksesi, miten mustan nimekkeen toimintoja on tarkoitus käyttää. Etsi tietoa hallintamekanismeista, jotka kontrolloivat mustan nimekkeen käyttöä.
- Arvioi läpinäkyvyyttä: Varmistaako sopimus, että mustan nimekkeen kriteerit ovat läpinäkyvät? Tarkista, ovatko olemassa selvät menettelyt virheellisten positiivisten poistamiseksi tai osoitteiden poistamiseksi mustalta nimekkeeltä.
- Turvallisuusauditoinnit: Tarkista, onko älykäs sopimus käynyt läpi turvallisuusauditoinnit maineikkaiden kolmannen osapuolen yritysten toimesta.
- Perehdy yhteisön palautteeseen tai verkkofoorumeihin liittyen mustien listojen käyttöön projektissa. Ole valppaana mahdollisten punaisten lippujen suhteen, joita yhteisön jäsenet voivat nostaa esiin epäoikeudenmukaisista käytännöistä tai läpinäkymättömyydestä.
- Suorittamalla perusteellinen analyysi ja ottamalla huomioon edellä mainitut tekijät, voit paremmin arvioida riskit, jotka liittyvät mustan nimekkeen toimintoihin älykkäissä sopimuksissa. Pysy ajan tasalla viimeisimmistä kehityksistä yhteisössämme (Telegram-kanava) ja parhaista käytännöistä petosten havaitsemiseksi (blogimme ja YouTube-kanava).
Hyviä uutisia: Turvallisuusskannerimme tunnistaa kaikki yleiset (myös piilotetut) Mustan Nimekemerkinnän toiminnot (BlackList) 99,9 % ajasta. Käytä premium-tilaustamme ja suojaat varasi uhkilta.
Seuraavaksi tarkastelemme muutamia yleisimpiä esimerkkejä Mustan Nimekkeen toiminnoista, jotka alustamme tunnistaa onnistuneesti.
Huomaa, että nämä ovat yksinkertaistettuja esimerkkejä, ja todellinen toteutus voi vaihdella. Älykkäiden sopimusten analysoinnissa sinun tulisi aina suorittaa perusteellinen koodikatselmus ja ottaa huomioon kontekstiin liittyvät tekijät.
Esimerkki 1: Mustan Nimekkeen perustoiminnallisuus
contract TokenWithBlackListAndFee {
address public owner;
mapping(address => bool) public BlackList;
uint256 public BlackListFee;
constructor(uint256 _fee) {
owner = msg.sender;
BlackListFee = _fee;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can modify the BlackList");
_;
}
function addToBlackListWithFee(address _account) public payable onlyOwner {
require(msg.value >= BlackListFee, "Insufficient fee");
BlackList[_account] = true;
}
function removeFromBlackList(address _account) public onlyOwner {
BlackList[_account] = false;
}
}
Havaitsemisvinkit: Etsi toimintoja (kuten addToBlackList ja removeFromBlackList), joilla on pääsyoikeuksien määrittely (onlyOwner). Tällaisten määrittelyjen läsnäolo tarkoittaa, että vain omistaja voi muokata mustaa nimeketta.
Esimerkki 2: Musta Nimeke maksutoiminnolla (BlackList with Fee)
contract TokenWithBlackListAndFee {
address public owner;
mapping(address => bool) public BlackList;
uint256 public BlackListFee;
constructor(uint256 _fee) {
owner = msg.sender;
BlackListFee = _fee;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can modify the BlackList");
_;
}
function addToBlackListWithFee(address _account) public payable onlyOwner {
require(msg.value >= BlackListFee, "Insufficient fee");
BlackList[_account] = true;
}
function removeFromBlackList(address _account) public onlyOwner {
BlackList[_account] = false;
}
}
Havaitsemisvinkit: Määritä toiminnot (kuten addToBlackListWithFee), jotka edellyttävät maksua (msg.value) nimekemerkinnän tekemiseksi. Tämä on erittäin vaarallinen merkki.
Esimerkki 3: Musta Nimeke aikasidonnaisilla ehdoilla
contract TokenWithTimeLock {
address public owner;
mapping(address => bool) public BlackList;
uint256 public BlackListTimeLock;
constructor(uint256 _timeLock) {
owner = msg.sender;
BlackListTimeLock = _timeLock;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can modify the BlackList");
_;
}
function addToBlackListTimed(address _account) public onlyOwner {
require(block.timestamp >= BlackListTimeLock, "Time lock not yet expired");
BlackList[_account] = true;
}
function removeFromBlackList(address _account) public onlyOwner {
BlackList[_account] = false;
}
}
Havaitsemisvinkit: Määritä toiminnot (esim. addToBlackListTimed), jotka asettavat lohkoajan riippuvaiset ehdot nimekemerkinnälle. Tätä käytetään tyypillisesti viivästyneisiin tai ajoitettuihin nimekkeisiin.
Esimerkki 4: Musta Nimeke tapahtumien kirjauksella
contract TokenWithBlackListAndEvents {
address public owner;
mapping(address => bool) public BlackList;
event AddressAddedToBlackList(address indexed account);
event AddressRemovedFromBlackList(address indexed account);
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can modify the BlackList");
_;
}
function addToBlackList(address _account) public onlyOwner {
BlackList[_account] = true;
emit AddressAddedToBlackList(_account);
}
function removeFromBlackList(address _account) public onlyOwner {
BlackList[_account] = false;
emit AddressRemovedFromBlackList(_account);
}
}
Havaitsemisvinkit: Tapahtumakirjaus: Etsi tapahtumia, jotka kirjaavat mustalle listalle asettamistoimet. Tapahtumat tarjoavat läpinäkyvyyttä ja ovat erittäin tärkeitä sopimuksen toimintojen seurannassa. Voit sanoa, että tämä on turvallisin tyyppi Mustasta Nimekkeestä, koska kehittäjät eivät piilota tätä toimintoa vaan kirjaavat avoimesti kaikki sen kutsut tapahtumalokiin.
Esimerkki 5: Musta Nimeke valkoisen listan toiminnoilla (Valkoinen lista)
contract TokenWithBlackListAndWhitelist {
address public owner;
mapping(address => bool) public BlackList;
mapping(address => bool) public whitelist;
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can modify the lists");
_;
}
function addToBlackList(address _account) public onlyOwner {
BlackList[_account] = true;
}
function removeFromBlackList(address _account) public onlyOwner {
BlackList[_account] = false;
}
function addToWhitelist(address _account) public onlyOwner {
whitelist[_account] = true;
}
function removeFromWhitelist(address _account) public onlyOwner {
whitelist[_account] = false;
}
}
Havaitsemisvinkit: Valkoisen listan toiminnallisuus: Kiinnitä huomiota sopimuksiin, joissa on sekä mustan listan että valkoisen listan toimintoja samanaikaisesti. Tällainen kaksinkertainen toiminnallisuus voi vaikuttaa token-siirtoihin ilman omistajan tietoa tai muihin petollisiin toimiin.
Esimerkki 6: Musta Nimeke hallintavalvonnalla (Hallintavalvonta)
interface Governance {
function canBlackList(address _caller) external view returns (bool);
}
contract TokenWithGovernanceControl {
address public owner;
address public governanceContract;
mapping(address => bool) public BlackList;
constructor(address _governanceContract) {
owner = msg.sender;
governanceContract = _governanceContract;
}
modifier onlyOwnerOrGovernance() {
require(msg.sender == owner || Governance(governanceContract).canBlackList(msg.sender), "Not authorized");
_;
}
function addToBlackListGoverned(address _account) public onlyOwnerOrGovernance {
BlackList[_account] = true;
}
function removeFromBlackList(address _account) public onlyOwnerOrGovernance {
BlackList[_account] = false;
}
}
Havaitsemisvinkit: Tunnista sopimukset, joissa mustan listan toiminnot ovat ulkoisten sopimusten hallinnassa. Kun harkitset älykästä sopimusta, analysoi huolellisesti koodi, kiinnitä huomiota pääsyoikeuksiin, maksumekanismeihin, aikaperusteisiin ehtoihin ja -ehdotuksiin, tapahtumien kirjaukseen, kiertämisen estoosiin ja muihin tärkeisiin tekijöihin. Lisäksi ota huomioon projektin erityispiirteet ja tavoitteet arvioidessasi mustan listan toimintojen käytön vaikutuksia.
Esimerkki 7: Musta Nimeke hätäpysäytys-toiminnolla
contract TokenWithEmergencyStop {
address public owner;
bool public emergencyStop;
mapping(address => bool) public BlackList;
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can modify the BlackList");
_;
}
modifier whenNotPaused() {
require(!emergencyStop, "Contract is paused");
_;
}
function addToBlackList(address _account) public onlyOwner whenNotPaused {
BlackList[_account] = true;
}
function removeFromBlackList(address _account) public onlyOwner whenNotPaused {
BlackList[_account] = false;
}
function toggleEmergencyStop() public onlyOwner {
emergencyStop = !emergencyStop;
}
}
Havaitsemisvinkit: Kaatumisen keskeytysmekanismi voi keskeyttää joitakin toimintoja, mukaan lukien mustan listan muutokset.
Esimerkki 8: Musta Nimeke dynaamisilla ehdoilla
contract TokenWithDynamicBlackList {
address public owner;
mapping(address => bool) public BlackList;
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can modify the BlackList");
_;
}
function conditionallyBlackList(address _account, uint256 _threshold) public onlyOwner {
require(getBalance(_account) < _threshold, "Account balance exceeds threshold");
BlackList[_account] = true;
}
function removeFromBlackList(address _account) public onlyOwner {
BlackList[_account] = false;
}
}
Havaitsemisvinkit: Musta lista voi usein perustua tiettyihin ehtoihin tai tapahtumiin. Tutki huolellisesti toiminnot, jotka tarkistavat ennen Mustan Nimekkeen aktivoimista. Nämä toiminnot sisältävät logiikan omistajan lisäämiselle Mustalle Nimekkeelle, tässä esimerkissä edellytetään, että tilin saldo ylittää määritetyn kynnyksen.
Esimerkki 9: Aikasidonnainen poisto Mustalta Nimekkeeltä (Aikasidonnainen poisto)
contract TokenWithTimeLockedRemoval {
address public owner;
mapping(address => bool) public BlackList;
mapping(address => uint256) public removalTimeLock;
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can modify the BlackList");
_;
}
function addToBlackList(address _account) public onlyOwner {
BlackList[_account] = true;
removalTimeLock[_account] = block.timestamp + 7 days;
}
function removeFromBlackList(address _account) public onlyOwner {
require(block.timestamp >= removalTimeLock[_account], "Time lock not expired");
BlackList[_account] = false;
removalTimeLock[_account] = 0;
}
}
Havaitsemisvinkit: Tunnista sopimukset, joissa mustan listan poisto on aikarajoitettu. Usein tällaisissa tapauksissa käytetään aikalaskelmia block.timestamp-perusteella.
Esimerkki 10: Musta Nimeke kaasurajoituksella (Kaasunrajoitussuojaus)
contract TokenWithGasLimitProtection {
address public owner;
mapping(address => bool) public BlackList;
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can modify the BlackList");
_;
}
modifier limitGas() {
require(gasleft() >= 100000, "Insufficient gas");
_;
}
function addToBlackListGasLimited(address _account) public onlyOwner limitGas {
BlackList[_account] = true;
}
function removeFromBlackList(address _account) public onlyOwner {
BlackList[_account] = false;
}
}
Havaitsemisvinkit: Tunnista sopimukset, joissa tiettyjen toimintojen, kuten mustan listan, suorittaminen on rajoitettu kaasun avulla.
Esimerkki 11: Musta Nimeke ulkoisen Oracle-integraation kanssa (Oracle)
interface Oracle {
function isBlackListed(address _account) external view returns (bool);
}
contract TokenWithOracleIntegration {
address public owner;
Oracle public oracle;
constructor(address _oracleAddress) {
owner = msg.sender;
oracle = Oracle(_oracleAddress);
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can modify the BlackList");
_;
}
function addToBlackListByOracle(address _account) public onlyOwner {
require(oracle.isBlackListed(_account), "Oracle did not confirm BlackListing");
}
}
Havaitsemisvinkit: Ole varovainen sopimusten suhteen, jotka luottavat ulkoisiin Oracleihin mustan listan päätöksenteossa. Tarkista aina Oraclejen luotettavuus ja läpinäkyvyys, joita älykäs sopimus käyttää.
Esimerkki 12: Musta Nimeke vuorovaikutuksessa ulkoisen sopimuksen kanssa
interface ExternalContract {
function addToBlackList(address _account) external;
function removeFromBlackList(address _account) external;
}
contract TokenWithExternalInteraction {
address public owner;
ExternalContract public externalContract;
constructor(address _externalContract) {
owner = msg.sender;
externalContract = ExternalContract(_externalContract);
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can modify the BlackList");
_;
}
function addToBlackListExternal(address _account) public onlyOwner {
externalContract.addToBlackList(_account);
}
function removeFromBlackListExternal(address _account) public onlyOwner {
externalContract.removeFromBlackList(_account);
}
}
Havaitsemisvinkit: Kun teet mustan listan päätöksiä, ole varovainen sopimusten suhteen, jotka vuorovaikuttavat ulkoisten sopimusten kanssa, erityisesti jos ulkoisen sopimuksen lähdekoodia ei ole vahvistettu.
Esimerkki 13: Musta Nimeke dynaamisella kynnyksellä (Dynaaminen kynnys)
contract TokenWithDynamicThreshold {
address public owner;
mapping(address => bool) public BlackList;
uint256 public dynamicThreshold;
constructor(uint256 _initialThreshold) {
owner = msg.sender;
dynamicThreshold = _initialThreshold;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can modify the BlackList");
_;
}
function addToBlackListDynamicThreshold(address _account) public onlyOwner {
require(getBalance(_account) > dynamicThreshold, "Account balance is below threshold");
BlackList[_account] = true;
}
function removeFromBlackList(address _account) public onlyOwner {
BlackList[_account] = false;
}
function updateDynamicThreshold(uint256 _newThreshold) public onlyOwner {
dynamicThreshold = _newThreshold;
}
}
Havaitsemisvinkit: Tunnista sopimukset, joissa mustan listan kynnysarvo on dynaaminen ja sitä voidaan muuttaa omistajan toimesta ajan kuluessa (kutsuttujen tiettyjen sopimuksen metodien avulla).
Yleisiä vinkkejä mustan listan toimintojen tunnistamiseen (BlackList)
- Etsi toimintoja, jotka muuttavat osoiteluetteloa (mapping):
Tarkastele älykkään sopimuksen koodia tunnistaaksesi toiminnot, jotka muuttavat osoiteluetteloa, kuten osoitteiden lisääminen tai poistaminen. - Tarkista vain omistajalle tarkoitetut pääsyt:
Mustan listan toiminnoilla on usein pääsyratkaisuja, jotka sallivat vain sopimuksen omistajan tai ylläpitäjien suorittaa ne. Etsi onlyOwner-modifikaattorin tai vastaavien pääsynhallintamekanismien käyttöä. - Tutki constructor()-konstruktorifunktiota:
Konstruktorifunktio määrittelee sopimuksen alkutilan. Tarkista, onko konstruktorissa alustettu osoitteiden sitomisia tai luetteloita, mikä viittaa mustalle listalle. - Tutki modifikaattoreiden logiikkaa:
Analysoi onlyOwner-tyyppisten modifikaattoreiden logiikkaa ymmärtääksesi, millä ehdoilla mustan listan toiminnot voivat suorittaa. - Etsi avainsanoja:
Etsi avainsanoja kuten "BlackList", "addBlackList", "removeBlackList" tai vastaavia termejä älykkään sopimuksen koodista (yksinkertaisimmissa tapauksissa näillä toiminnoilla on vastaavat nimet, monimutkaisemmissa variantteissa nimet eivät välttämättä heijasta toiminnon olemusta peittääkseen sen). - Tarkista dokumentointi ja kommentit:
Käy läpi dokumentointi ja sopimuksen kommentit mahdollisista maininnoista mustan listan toiminnoista. Kehittäjät antavat usein tietoa siitä, miten tiettyjä toimintoja, mukaan lukien mustan listan, tulisi käyttää. - Tarkista ulkoiset kutsut (call) tai tapahtumat (event):
Etsi ulkoisia kutsuja tai tapahtumia, jotka voivat laueta, kun osoite lisätään tai poistetaan mustalta listalta. Tämä voi antaa käsityksen siitä, miten sopimus vuorovaikuttaa ulkoisten komponenttien kanssa mustaan listan toimiin liitty vien toimintojen perusteella. - Arvioi sopimuksen koodin päivitys- ja hallintamahdollisuuksia:
Arvioi älykäs sopimus päivitysmekanismeille tai hallintarakenteille, jotka mahdollistavat muutokset sen mustan listan logiikkaan. Ymmärtäminen, miten päivitykset hoidetaan, on kriittistä odottamattomien mustan listan toimintojen muutosten ennakoimiseksi. - Tarkista mustan listan logiikka muista toiminnoista:
Tarkista muut sopimuksen toiminnot, joista tarkistetaan, onko osoite mustalla listalla ennen tiettyjen toimien suorittamista. - Tutustu käyttötapauksiin ja tokenomiikkaan:
Ymmärrä projektin käyttötapaukset ja tokenomiikka. Jos projekti liittyy käyttäjäosoitteiden hallintaan tai sillä on toimintoja käyttäjien oikeuksiin liittyen, mustan listan käyttö voi olla perusteltua. - Tapahtumien lokit:
Huomaa tapahtumalokin läsnäolo, joka liittyy mustan listan toimiin. Tapahtumat ovat usein käytössä merkitsemään merkittäviä tilamuutoksia, tarjoten läpinäkyvyyttä sopimuksen käyttäytymiseen. - Kaasunrajoitussuojaus:
Ole varovainen funktioiden kanssa, joissa on kaasunrajoitussuojaus. Vaikka tämä voi olla turvallisuusominaisuuden toteutus, sitä voidaan käyttää myös johtamaan tai rajoittamaan joitain kriittisiä sopimuksen toimintoja. - Aikaan sidotut ehdot:
Tarkista mustaan listaukseen liittyvät aikaan sidotut ehdot. Esimerkiksi sopimukset voivat toteuttaa aikalukkoja poistoa tai muita aikasidonnaisia mekanismeja varten. - Itsenäiset tarkastukset:
Etsi älykkäitä sopimuksia, jotka on tarkastettu itsenäisesti arvostetuilla tarkastusyrityksillä. Tarkastusraportit tarjoavat tietoa sopimuksen turvallisuudesta ja toiminnallisuudesta. - Tarkista yhteisön palautetta:
Tarkista yhteisön foorumeita, sosiaalista mediaa tai virallisia viestintäkanavia keskusteluista mustan listan toimintojen läsnäolosta ja käytöstä. Käyttäjät voivat tarjota arvokkaita oivalluksia ja huolenaiheita.
Kun analysoit älykästä sopimusta, on kriittistä ymmärtää sen ominaisuudet ja toiminnallisuus kokonaisuudessaan. Nämä vinkit auttavat tunnistamaan ja arvioimaan mustan listan toimintojen läsnäoloa, mikä mahdollistaa tietoon perustuvat päätökset sopimukseen vuorovaikutuksesta.
Missä mahdollista, valitse sopimukset, jotka noudattavat vakiintuneita standardeja (esim. ERC-20). Nämä standardit ovat usein tarkastettuja ja niillä on maine luotettavuudesta.
Toivottavasti nämä esimerkit auttoivat sinua ymmärtämään paremmin Musta Nimeke -järjestelmiä älykkäissä sopimuksissa.
Koska kaikki tiedot lohkoverkossa ovat avoimia (tietysti olettaen, että sopimuksen lähdekoodi on vahvistettu), tämän tiedon avulla voit itsenäisesti tutkia älykkäitä sopimuksia ja tunnistaa erilaisia huijausjärjestelmiä.
Kuitenkin olemme jo tehneet tämän kaiken puolestasi! Tilaa premium-tilaus ja saat pääsyn yksinoikeuksin älykkään sopimuksen toimintoihin ja tuoreimpiin analyyseihin. Lisää mahdollisuuksiasi onnistua kannattavien tokenien sijoittamisessa.
Terveisin, Lotus Market -tiimi.